#if defined和#if !defined的含义

对于大型项目一般要用到许多宏定义,那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.if defined宏正是为这种情况提供了解决方案。

#define .... 
#define a 100 
此时,我们要检查a是否定义,或者我们要给a一个不同的值,就加入如下句子 
#if defined a 
#undef a 
#define a 200 
#endif 
上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200 

同样,检验a是否定义: 
#ifndef a    //如果a没有被定义 
#define a 100 
#endif 

以上所用的宏中:#undef为解除定义,#ifndef是if not defined的缩写,即如果没有定义。 


#if defined XXX_XXX 
#endif 
是条件编译,是根据你是否定义了XXX_XXX这个宏,而使用不同的代码。 

一般.h文件里最外层的 
#if !defined XXX_XXX 
#define XXX_XXX 
#endif 
是为了防止这个.h头文件被重复include。 

#error XXXX 
是用来产生编译时错误信息XXXX的,一般用在预处理过程中; 
例子: 
#if !defined(__cplusplus) 
#error C++ compiler required. 
#endif 

defined可以使用逻辑运算符进行组合:

  1. #define CONST_PI (3.1415926)

  2. #define CONST_R (20)

  3. #if defined(CONST_R ) && defined(CONST_PI)

  4. #define CONST_AREA (CONST_R*CONST_PI*CONST_R)

  5. #endif


版权声明:本文为u_nravel原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。