C++中的条件编译,分为三种形式,分别以下:ios
1.#ifdef define_name测试
#…………..3d
#elsecode
#………….orm
#endifci
这种形式的条件编译,意思大概就是:若是定义了宏define_name,就执行#ifdef define_name到#else以前的代码,不然执行#else到#endif之间的代码,其中#else能够省略。it
2.#ifndef define_nameio
#…………………编译
#elsetable
#………………..
#endif
含义:若是定义了宏define_name,就执行#else到#endif之间的代码,不然执行#ifndef define_name到#else之间的代码,其中#else也能够省略。
3.#if 表达式
#……….
#else
#……………
#endif
这种形式的宏,跟if和else的用法差很少,若是表达式的值为真,则执行#if 表达式 到#else之间的代码,不然执行#else到#endif之间的代码,其中#else也能够省略。
有时咱们可能会不止判断两种条件,可能有多种,相似:if……else if…..else if ……else ,这时咱们就彻底能够使用#elif来完成咱们想要的条件编译
#if 表达式
#………..
#elif 表达式
#………..
#else
#……….
#endif
另外还有一种宏有点特殊,以下:
#if defined(__sgi) cout << "__sgi" << endl; #endif
这小段代码的意思是:若是定义了宏__sgi,条件表达式的值为真,不然为假,而后再执行相应的代码。
其实,上述的这段小代码也能够用#ifdef来实现,看我的喜爱罢了。
有时,咱们看到别人写的宏,会产生疑问,以下:
#if 0 # include<new> # define __THROW__BAD__ALLOC throw bad_alloc #elif !defined(__THROW__BAD__ALLOC) # include<iostream> # define __THROW__BAD__ALLOC cerr<<"out of memory"<<endl;exit(1) #endif
咱们平时用if和else时,若是if条件下面有多个表达式语句,咱们要用{}将其括起来,而宏中怎么没呢?刚开始的时候,我也有点小疑惑,后面本身测试了一下,发现宏中的能够不用{}将其条件断定下面的多个表达式语句括起来。