C++中的条件编译,分为三种形式,分别如下:
1.#ifdef define_name
#…………..
#else
#………….
#endif
这种形式的条件编译,意思大概就是:如果定义了宏define_name,就执行#ifdef define_name到#else之前的代码,否则执行#else到#endif之间的代码,其中#else可以省略。
2.#ifndef define_name
#…………………
#else
#………………..
#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条件下面有多个表达式语句,我们要用{}将其括起来,而宏中怎么没呢?刚开始的时候,我也有点小疑惑,后面自己测试了一下,发现宏中的可以不用{}将其条件判定下面的多个表达式语句括起来。