You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无值定义的宏在#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:44:50