书目《C程序设计(第三版)》
C提供的预处理功能主要有宏定义、文件包含、条件编译三种,为了与一般C语言语句相区别,这些命令以"#"开头。
-
(一)宏定义
1、一般形式为:#define 标识符 字符串
带参数形式为:#define 宏名(参数表) 字符串
2、带参数的宏定义与函数是不同的:
a.函数调用时,先求出实参表达式的值,然后代入形参,而使用带参数的宏定义只是进行简单的字符替换;
b.函数调用是在程序运行时处理的,为形参分配临时的内存单元,而宏展开是在编译前进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念;
c.函数的实参和形参都要定义类型,二者的类型要求一致,而宏不存在类型问题;
d.调用函数只可得到一个返回值,而用宏可以设法得到几个结果;
e.宏展开会使得程序变长,而函数调用不会使源程序变长;
f.宏替换不占运行时间,只占编译时间,而函数调用则占用运行时间; -
(二)文件包含
所谓"文件包含"处理是指一个源文件可以将另外一个源文件的全部内容包含进来。
其一般形式为:#include "文件名"或者#include <文件名> -
(三)条件编译
有时希望程序中一部分内容只在满足一定条件时才进行编译,这就是“条件编译”。该预编译功能是C语言特有的。