无值定义的宏在#if预处理指令中的判定结果及编译器差异
无值宏在#if分支中的判定行为
- 标准判定逻辑:当通过
#define FOO定义无值宏时,在#if FOO的预处理判定中,该宏会被视为0,因此#if FOO等价于#if 0,会跳过当前分支,转而执行#else(如果存在)分支。 - 编译器差异:主流编译器(GCC、Clang、MSVC)均严格遵循C标准(C99及后续版本)的规定,处理结果不存在差异。仅部分极为老旧的编译器可能存在特殊行为,但目前已基本淘汰。
#if中FOO的取值:此时FOO的取值为0。
示例代码:
#define FOO #if FOO printf("执行FOO分支\n"); #else printf("执行else分支\n"); // 实际运行会执行此语句 #endif
内容的提问来源于stack exchange,提问作者RockingDice
相关产品推荐
相关产品推荐

