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宏,其中的一大段代码会被执行,否则这段代码等同于注释。