转自 http://blog.chinaunix.net/uid-26435987-id-3077444.html
因为对于一个大的程序而言,我们可能会定义很多变量(不管是放在源文件还是头文件),那么我们在定义某个变量时,我们就必须返回检查原来是否定义此变量,但这样做很麻烦,if defined宏正式为了这种情况提供了解决方案,举个例子,如下:
# define.....
# define.....
#define.....
......
......
# define a 100
.....
此时我们检查a是否定义(假设我们已经记不着这一点),或者我们要给a一个不同的值,就加入如下的句子
#if define a
#undef a
#define a 200
#endif
上述语句检查a是否定义,如果被定义,则用#undef语句解除定义,并重新定义a为200
同样检查a是否定义:
#ifndef a
#define a 100
#endif
以上所用宏中,#undef为解除定义,#ifndef 是 if not define 的缩写,即如果没有定义。
这就是#if defined的唯一作用!
(1)
#if defined XXX_XXX
#endif
是条件编译,是根据你是否定义了XXX_XXX这个宏,而使用不同的代码。
一般.h文件里最外层的
#if! define XXX_XXX
#define XXX_XXX
#endif
是为了房子这个.h头文件被重复include。
(2)
#error XXXX
是用来产生编译时错误信息的,一般用在预处理过程中;
例子:
#if ! defined(_cplusplus)
#error C++ compiler required.
#endif