第第1010章章编译预处理编译预处理以前程序中见到的以“#”号开头的命令就是预处理命令
如包含命令#include,宏定义命令#define等
预处理是指在编译中第一遍扫描(词法扫描和语法分析)之前所作的工作
对一个源文件进行编译时,系统自动引用预处理程序对源程序中的预处理部分作处理,处理完毕后自动进入源程序的编译
C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等
2文件包含10
3条件编译退出10
1宏宏用一个标识符来替换程序中的一个字符串,称为“宏替换”
这样可以使程序更简洁
被定义为“宏”的标识符称为“宏名”
在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏展开”
宏展开时不进行语法检查
宏定义是由源程序中的宏定义命令完成的
宏代换是由预处理程序自动完成的
在C语言中,“宏”分为有参数和无参数两种
1无参宏定义无参宏定义无参宏的宏名后不带参数
其定义的一般形式为:#define#define宏名宏体宏名宏体其中的“#”表示这是一条预处理命令
凡是以“#”开头的均为预处理命令
“define”为宏定义命令
宏名是一个标识符,其中不能有空格,也不能使用引号("")括起来
宏体是字符串,可以是常数、表达式或语句,甚至可以是多个语句
【例10-1】(见课本)1宏替换时并不进行语法检查宏定义是用宏名来表示一个字符串,宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查
如有错误,只能在编译已被宏展开后的源程序时发现
2不必加分号宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换
3宏定义应在函数外,引用之前宏定义必须写在函数之外,通常在引用之前定义,其作用域为宏定义命令起到源程序结束