预处理命令
C语言与其它高级语言的一个重要区别是可以使用预处理命令和具有预处理功能。预处理命令是用户自己按照ANSIC统一规定命名的。它们不属于C语言本身,不能直接编译,需进行“预处理”,如#define pi 3.14中 pi是预处理命令,define是c语言提供的预处理功能。
C语言提供的预处理功能主要有以下3种:1、宏定义;2、文件包含;3、条件编译。为了区分与一般C语句相区别,这些命令以符号“#”开头。
1、 宏定义:
(1)、不带参数的宏定义:#define 标识符 字符串
注意:a、宏名一般习惯用大写字母表示,但也可用小写字母。
b、使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。
c、宏定义是简单的替换,不做正确性检测。
d、宏定义不是c语句,不必在行末加分号。
e、#define出现在函数的外面,有效范围为定义命令之后到本源文件结束。
f、可以用#undef命令中止宏定义的作用域。
g、宏定义可以引用已定义的宏名,可以层层置换。
h、对程序中用双撇号“”括起来的字符串内的字符,即使与宏名相同,也不进行置换。
K、宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,只作字符替换,不分配内存空间。
(2)、带参数的宏定义:#define 宏名(参数表) 字符串
注意:a、对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。注意字符串表达式中参数括号的使用。
b、在宏定义时,在宏名与带括号的参数之间不应有空格,否则将空格以后的字符作为字符串的一部分替换。
2、“文件包含”处理:
所谓“文件处理”是指一个源文件可以将另一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。用#include“文件名”或#include<文件名>二者区别:前者用于用户自己定义的.h文件在当前目录下寻找,如找不到去系统存放C库函数的头文件目录中寻找。可#include“c:\wang\file.h”指出目录。后者直接在系统存放C库函数的头文件目录中寻找。
(1)、一个#include命令只能指定一个被包含文件。
(2)、可以嵌套包含,file1.h包含file2.h,file2.h要在file1.h之前定义。
(3)、包含文件编译后成为一个文件,不是两个。全局变量有效。
3、条件编译:
(1)、#ifdef 标识符
程序段 1
#else
程序段 2
#endif
它的作用是若所指定的标识符已经被#define命令定义过,则在程序编译阶段编译程序1,否则编译程序段2。没有#else部分也可。这里的程序段可以是语句组,也可以是命令行。
(2)、#ifndef 标识符
程序段 1
#else
程序段 2
#endif
它的作用是若所指定的标识符未被#define命令定义过,则在程序编译阶段编译程序1,否则编译程序段2。
(2)、#if 表达式
程序段 1
#else
程序段 2
#endif
它的作用是若所指定的表达式为真(非零)时,则在程序编译阶段编译程序1,否则编译程序段2。可以事先给定条件,使程序在不同的条件下执行不同的功能。
有利于程序的可移植性,增加程序的灵活性。
文章评论(0条评论)
登录后参与讨论