1、预处理命令不是C语言的语法成分,而是传递给编译程序的各种指令。C语言的预处理命令包括:
(1)宏定义:
#define
#undef
(2)文件包括:
#include
(3)条件编译:
#if
#ifdef
#else
#elif
#endif
(4)其他:
#line
#error
#pragma
2、宏定义分为两种:不带参数的宏定义 和 带参数的宏定义
(1)不带参数的宏定义:
(1.1)#define指令定义一个标识符来代表一个字符串,在源程序中发现该标识符时,都用该字符串进行替换,以形成新的源程序。这种标识符称为宏名(macro name),替换过程称为宏替换(macro substitution)。宏替换的操作是在预编译时进行的。
(1.2)一般定义形式:
#define 标识符 单词串
(1.3)注意:
a、宏一般不能用分号结尾,除非程序员特意这么做;
b、通常用大写字母来定义宏,以便与变量名区别;
c、宏替换仅仅是简单的替换,不对宏定义的文本进行任何处理;
d、宏定义时,如果单词串很长,应使用续行符“ \ ”;
e、宏一般定义在文件的开头部分,一直到文件结尾,如需提前结束,可以使用#undef命令;
f、宏定义可以嵌套定义,但是不可以递归定义;
g、宏可以被重复定义;
h、宏定义时,表达式加上括号。
(2)带参数的宏定义:
(2.1)带参数的宏定义的一般形式(注意:标识符与圆括号之间不能有空格):
#define 标识符(参数列表) 单词串
3、文件包含主要是<>与“”的区别,此处省略不表;
4、条件编译:一般情况下,程序中的所有代码都参加编译,但是有时候也希望根据一定的条件(譬如程序版本)去编译源文件的不同部分,这就是条件编译。
几种常用的条件编译形式:
(1)#if ...#endif形式:
#if 条件1
程序段1
#elif 条件2
程序段2
.
.
.
#else
程序段n
#endif
(2)#ifdef ...#endif形式:
#ifdef 宏名
程序段1
#else
程序段2
#endif
(3)#ifndef ...#endif形式:
#ifdef 宏名
程序段1
#else
程序段2
#endif