关于C++中的条件编译

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条件下面有多个表达式语句,咱们要用{}将其括起来,而宏中怎么没呢?刚开始的时候,我也有点小疑惑,后面本身测试了一下,发现宏中的能够不用{}将其条件断定下面的多个表达式语句括起来。

相关文章
相关标签/搜索