C++ 预处理指令介绍
预处理指令,指示编译器在实际编译之前所需完成的预处理。
所有的预处理指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。
C++支持很多预处理指令,比如 #include、#define、#if、#else、#line 等。
最常见的预处理有:
☆文件包含: #include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。
☆宏替换(宏定义): #define,这是最常见的用法,它可以定义符号常量、函数功能、重新命名、字符串的拼接等各种功能。#define 预处理指令用于创建符号常量。该符号常量通常称为宏,指令的一般形式是:
#define 标识符 值
或
#define 标识符(参数表) 代码序列
其中参数表中的参数之间用逗号分隔,在代码序列中必须要包含参数表中的参数。在定义带参数的宏时,宏名与左圆括号之间不允许有空白符,应紧接在一起,否则变成了无参数的宏定义。带参数宏调用提供的实在参数个数必须与宏定义中的形式参数个数相同。
宏定义的有效范围称为宏名的作用域,宏名的作用域从宏定义的结束处开始到其所在的源代码文件末尾。宏名的作用域不受分程序结构的影响。如果需要终止宏名的作用域,可以用预处理指令#undef加上宏名。
宏名一般用大写字母,以便与变量名区别。如有必要,宏名可被重复定义,被重复定义后,宏名原先的意义被新意义所代替。
☆条件编译:一般情况下,在进行编译时对源程序中的每一行都要编译,但是有时希望程序中某一部分内容只在满足一定条件时才进行编译,如果不满足这个条件,就不编译这部分内容,这就是条件编译。 #if,#ifndef,#ifdef,#endif,#undef等是比较常见的预处理,主要是进行编译时进行有选择的挑选,注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。
下面举例解析之。
一、文件包含