/* C++ 预处理器: 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。 预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 #include 指令这个宏用于把头文件包含到源文件中。 C++ 还支持很多预处理指令,比如 #include、#define、#if、#else、#line 等 */ /***********1-#define 预处理***************/ /* (1)#define 预处理指令用于创建符号常量。该符号常量通常称为宏,指令的一般形式是: #define macro-name replacement-text eg: #define PI 3.14159 int main () { cout << "Value of PI :" << PI << endl; return 0; } (2)可以使用 #define 来定义一个带有参数的宏 #define MIN(a,b) (a<b ? a : b) int main () { int i, j; i = 100; j = 30; cout <<"较小的值为:" << MIN(i, j) << endl; return 0; } */ /***********2-条件编译***************/ /* (1)用来有选择地对部分程序源代码进行编译。这个过程被称为条件编译。 条件预处理器的结构与 if 选择结构很像: #ifdef definename //如果definename在#ifdef之前被#define定义过了,则会进入执行下面代码 代码; #endif (2) */ /***********3-# 和 ## 运算符***************/ /* # 和 ## 预处理运算符在 C++ 和 ANSI/ISO C 中都是可用的。 (1)# 运算符会把 replacement-text 令牌转换为用引号引起来的字符串。 eg: #define MKSTR( x ) #x int main () { cout << MKSTR(HELLO C++) << endl; //#将HELLO C++转换为"HELLO C++" //因此 cout << MKSTR(HELLO C++) << endl; 相当于 cout << "HELLO C++" << endl; return 0; } (2)## 运算符用于直接连接两个令牌 eg: #define concat(a, b) a ## b int main() { int xy = 100; cout << concat(x, y); //##将x, y转换为xy //因此 cout << concat(x, y); 相当于 cout << xy; return 0; } */ /***********4-C++ 中的预定义宏***************/ /* C++ 提供了下表所示的一些预定义宏: __LINE__ 这会在程序编译时包含当前行号。 __FILE__ 这会在程序编译时包含当前文件名。 __DATE__ 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。 __TIME__ 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。 eg: 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 */ 备注:此为学习笔记,课程来源菜鸟教程。