表达式
宏定义
#if 和条件判断 if 的用法相似,不过将 else -> #else
、else if -> #elif
。同时凡是条件编译,均需要#endif
结尾。
同时需要注意的是:#if 命令要求判断条件为整型常量表达式,也就是说表达式中不能包含变量,而且结果必须是整数;而if后面的表达式没有限制,只要符合语法就行。
#define select 0
#if (select > 1)
printf("select > 1");
#elif (select == 1)
printf("select == 1");
#else
printf("select < 1");
#endif
上述例子就是根据select和1的大小 选择编译不同的语句。
再看下面的代码:
#include "stdio.h"
#define MAX 10
int main()
{
#if MAX == 1
printf("MAX已被定义\n");
#else
printf("MAX未被定义\n");
#undef MAX//取消之前的MAX的定义
#define MAX 20
#endif
printf("MAX = %d\n", MAX);
return 0;
}
执行结果如下:
上述内容参考至:https://www.cnblogs.com/lanhaicode/p/10546514.html
1)#ifdef 的作用是判断某个宏是否定义,如果该宏已经定义则编译后面的代码。
#ifdef TEST
printf1("TEST");
#else
print2("NONE TEST");
#endif
2)这里 #ifdef
后面仅能接一个宏定义,当我们需要同时判断多个宏定义时,就需要用到 #if defined
。如下:
#if defined TEST1 || defined TEST2
printf1("TEST1 or TEST2 def");
#else
printf2("none of TEST1 TEST2 def");
#endif
3)和 #if
一样, #ifdef
和 #if defined
也可以搭配 #else
、#elif
使用,并且也要求以#endif
结尾。如下:
#if defined TEST && defined CAL
printf1("TEST CAL def");
#elif defined TEST2
printf1("TEST2 def");
#else
printf1("other def");
#endif
上面示例中的第一个判断 #if defined TEST && defined CAL
如果只有一个宏,如 #if defined CAL
,那么你也可以这样写 #ifdef CAL
,二者等价。
#if 0
的形式可以做到整段代码的注释