#define 定义一个预处理宏
#undef 取消宏的定义
#if 编译预处理中的条件命令,相当于C语法中的if语句
#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef 与#ifdef相反,判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined 与#if, #elif配合使用,判断某个宏是否被定义
#ifdef ABC
// ... codes while definded ABC
#elif (CODE_VERSION > 2)
// ... codes while CODE_VERSION > 2
#else
// ... remained cases
#endif // #ifdef ABC
#include<stdio.h>
#define BB
#ifdef AA
#define HELLO "hello world"
#elif BB
#define HELLO "hello CC"
#endif
int main()
{
printf("%s\n",HELLO);
return 1;
}
会出现:error: #if with no expression的错误。
原因是BB虽然定义了,但是定义的是空值,放在#elif后面就不行。
因为#elif不仅仅是检查后面的宏有没有定义,还会检查其值。
但是#ifdef就只是检查后面的宏是否定义,而不管其值为多少。
可以把#define BB改成#define AA试一下,结果就会打印hello world了。
也可以把#define BB改成#define BB 0 试一试,#elif 0为假,HELLO没有定义。