预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。
所有的预处理器指令都是以井号(#)开头**,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。**
#define 预处理
用于创建符号常量,该符号常量又被称为宏
比如#define PI 3.14
预处理后PI编译时都会被替换为3.14
define创建的是全局不可变变量,const创建的是局部/成员不可变变量
函数宏
带参数的宏被称为函数宏#define MIN(a,b) (((a)<(b)) ? a : b)
无论是符号常量宏还是函数宏,使用都是如同普通变量和函数一样调用
条件编译
有选择地对部分程序源代码进行编译
#ifndef NULL
#define NULL 0
#endif
#ifdef DEBUG代码
如果该语句前已经定义了DEBUG符号常量,则代码会编译。否则不会
使用预处理注释代码#if 0 不进行编译的代码 #endif
#和##运算符
会替换内容 ##会连接内容
#define MKSTR( x ) #x
cout << MKSTR(HELLO C++) << endl;
将MKSTR(x)替换为x 输出HELLO C++
#define concat(a, b) a ## bint xy=100;cout << concat(x, y);
将concat(x,y)替换为变量xy。 输出100
没整明白有啥用
C++ 中的预定义宏
C++ 提供了下表所示的一些预定义宏:
| 宏 | 描述 |
|---|---|
| LINE | 这会在程序编译时包含当前行号。 |
| FILE | 这会在程序编译时包含当前文件名。 |
| DATE | 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。 |
| TIME | 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。 |
都是宏,所以使用方法就如同变量一样使用
