预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。
所有的预处理器指令都是以“#”开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。
例如:#include、#define、#if、#else、#line 等
#define预处理
#define 预处理指令用于创建符号常量。该符号常量通常称为宏,这种定义方式也被称为宏定义。
一般形式:#define 常量名 值
宏常量
作用:预处理时,会用值来代替程序中出现过的常量名
例:
#include <iostream> #define PI 3.14159 int main() { double radius = 5.0; double area = PI * radius * radius; std::cout << "The area of a circle with radius " << radius << " is: " << area << std::endl; return 0; }
参数宏
作用:可以使用 #define 来定义一个带有参数的宏(函数)
例:
#include <iostream> using namespace std; #define MIN(a,b) (a<b ? a : b) int main () { int i, j; i = 100; j = 30; cout <<"较小的值为:" << MIN(i, j) << endl; return 0; }
条件编译(头文件守卫)
作用:避免重复声明头文件
格式
#ifndef XXXX #define XXXX #endif
XXXX一般格式是:如果头文件名是mymath.h,则XXXX应该写为_MYMATH_H_
避免重复声明,重复声明头文件的问题
C++中的预定义宏
常用:
_WIN64:判断当前编译环境是否为 64 位的 Windows 操作系统
_WIN32:判断当前编译环境是否为 32 位的 Windows 操作系统
其他:
__LINE__:这会在程序编译时包含当前行号。
__FILE__:这会在程序编译时包含当前文件名。
__DATE__:这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。
__TIME__:这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。
例:
#include <iostream> using namespace std; int main () { cout << "Value of __LINE__ : " << __LINE__ << endl; cout << "Value of __FILE__ : " << __FILE__ << endl; cout << "Value of __DATE__ : " << __DATE__ << endl; cout << "Value of __TIME__ : " << __TIME__ << endl; return 0; } 结果 Value of __LINE__ : 6 Value of __FILE__ : test.cpp Value of __DATE__ : Feb 28 2011 Value of __TIME__ : 18:52:48