20.2.3 条件编译
if、#else和#endif用于条件编译,其基本形式如下所示。
#if判断表达式 语句 #else 语句 #endif或 #if判断表达式 语句 #endif
判断表达式可以是包含宏、算术运算和逻辑运算等的合法C++表达式。如果常量表达式为一个未定义的宏,那么其值被视为0,注意判断表达式中出现的宏必须为对象宏。
使用条件编译可以提升代码的可移植性,针对不同平台执行不同语句,如示例代码20.1所示。
代码20.1 条件编译的使用ConditionalCompilation
<——————————文件名:example2001.cpp————————————————-> 01 #include<iostream> 02 using namespace std; 03 #define WINDOWS/定义WINDOWS宏/ 04 void disp() 05 { 06 #if defined(WINDOWS)//条件编译 07 cout<<"本程序当前运行在Windows环境下"<<endl; 08 #else 09 cout<<"本程序当前运行在非Windows环境下"<<endl; 10 #endif 11 } 12 int main() 13 { 14 disp();//函数调用 15 return 0; 16 }
输出结果如下所示。
本程序当前运行在Windows环境下
【代码解析】代码第4行的disp函数中采用了条件编译指令编写,因为程序中定义了WINDOWS宏,所以输出“本程序当前运行在Windows环境下”,假若将“#define WINDOWS”语句注释掉,程序将输出“本程序当前运行在非Windows环境下”。
代码第6行“#if defined(WINDOWS)”语句中的“defined(宏名)”的含义是若宏被定义则返回1,否则返回0,defined之间可以进行逻辑运算。
此外,使用条件编译指令也可用于大段代码的注释或调试信息的输出等,如下所示。
#if defined(DEBUG) { 一大段代码; } #endif
如果定义了DEBUG宏,其中的一大段代码会被执行,否则这段代码等同于注释。