跟在#if后面的表达式在编译时求值,因此它必须仅含常量及已定义过的标识符,不可使用变量。表达式不许含有操作符sizeof(sizeof也是编译时求值)。
#else命令的功能有点象C语言中的else;#else建立另一选择(在#if失败的情况下)。注意,#else属于#if块。
#elif命令意义与ELSE IF 相同,它形成一个if else-if阶梯状语句,可进行多种编译选择。#elif 后跟一个常量表达式。如果表达式为true,则编译其后的代码块,不对其它#elif表达式进行测试。否则,顺序测试下一块。
12345#if expressionstatement sequence#elif expression1statement sequence#endif在嵌套的条件编译中#endif、#else或#elif与最近#if或#elif匹配。
1# ifdef 和# ifndef条件编译的另一种方法是用#ifdef与#ifndef命令,它们分别表示”如果有定义”及”如果无定义”。# ifdef的一般形式是:
123# ifdef macronamestatement sequence#endif#ifdef与#ifndef可以用于#if、#else,#elif语句中,但必须与一个#endif。
12345678910111213141516#define MAX 91#include using namespacestd; intmain(){#ifdef MAX cout<<"hello,MAX!"<#else cout<<"where is MAX?"<#endif#ifndef LEO cout<<"LEO is not defined"<#endif return0;}命令#undef 取消其后那个前面已定义过有宏名定义。一般形式为:
1#undef macroname命令#line改变__LINE__与__FILE__的内容,它们是在编译程序中预先定义的标识符。命令的基本形式如下:
1#line number["filename"]其中的数字为任何正整数,可选的文件名为任意有效文件标识符。行号为源程序中当前行号,文件名为源文件的名字。命令#line主要用于调试及其它特殊应用。注意:在#line后面的数字标识从下一行开始的数字标识。
1234#line 100 "jia" cout<<"#line change line and filename!"< cout<<__LINE__< cout<<__FILE__<五 #pragma
命令#pragma 为实现时定义的命令,它允许向编译程序传送各种指令。