一、#if ... #else ... #endif (c语言的宏定义)
#if的后面跟的是表达式。
#if (A==10)||(B==20)
code...
#endif
作用:如果(A==10)||(B==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!)
二、#if defined 与 #if !defined
#if后面跟的是一个宏。
#if defined 、#if !defined 是条件编译;它不管后面跟的逻辑是“真”还是“假”它只管宏定义里面有没有定义后面跟的这个宏,如果定义了这个宏,那么,编译器会编译#if与#endif之间的代码。
1、用法
#if defined xxx
//如果对xxx进行了宏定义,则编译此处内容。
#else
//如果没有对xxx进行宏定义,则编译此处内容。
//与if...else...用法相同,else部分可以省略。
#endif
----------------------------------------
#if defined xxx
//如果对xxx进行了宏定义,则编译此处内容。
#elif defined xxx
2、例子
//用法与if...else if...相似。
#endif
一般.h文件里最外层的
#if !defined XXX_XXX
#define XXX_XXX
#endif
是为了防止这个.h头文件被重复include。
----------------------------------------
#define F 500
#if defined F //如果a被定义
#undef F
#define F 100
#endif
上述语句检验F是否被定义,如果被定义,则用#undef语句解除定义,并重新定义F为100
----------------------------------------
#if !defined a //如果a没有被定义
#define a 100
#endif
上述语句检验F是否被定义,如果没有被定义,则定义F为100
三、#ifdef 与 #ifndef
#ifdef的使用和#if defined()的用法一致
#ifndef又和#if !defined()的用法一致。
#ifdef和 #if defined 的区别在于,后者可以组成复杂的预编译条件
#if defined (AAA) && defined (BBB)
xxxxxxxxx
#endif
#if defined (AAA) || VERSION > 12
xxxxxxxxx
#endif
而#ifdef就不能用上面的用法,也就是说,当你要判断单个宏是否定义时
#ifdef和 #if defined 效果是一样的,但是当你要判断复杂的条件时,只能用 #if
四、#error XXXX
是用来产生编译时错误信息XXXX的,一般用在预处理过程中;
例子:
#if !defined(__cplusplus)
#error C++ compiler required.
#endif