一、预处理器
预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。
所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。
二、语法
#define 预处理指令用于创建符号常量。该符号常量通常称为宏,指令的一般形式是:
#define marco-name replace-text
三、原理
考虑以下代码:
#include<iostream>
using namespace std;
#define PI 3.1415926
int main(){
cout<<PI;
return 0;
}
及
#include<iostream>
using namespace std;
const double PI=3.1415926;
int main(){
cout<<PI;
return 0;
}
它们的运行结果都是3.1415926
,有什么不同呢?
对于第一段代码,如果我们对其编译(GCC),使用 -E 选项进行编译,并把结果重定向到 test.p。打开test.p,将会看到它已经包含大量的信息,而且在文件底部的值被改为如下:
$ gcc -E test.cpp > test.p
...
int main (){
cout<<3.1415926;
return 0;
}
而第二段代码编译后却与源代码一样。
可以看出,#define
的原理是将define
以后的全部marco-name
替换成replace-text
。