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

嵌套宏定义会产生什么结果?示例代码中变量a最终取值为1还是11?

宏嵌套递归替换的行为与变量取值分析

结论

变量a的最终取值是11。

原因分析

C预处理器的宏替换是纯文本替换,但内置递归防护机制:在宏替换链中,若检测到会导致无限递归的宏引用,会停止继续展开。

针对你给出的代码:

#define a aa
#define aa a
int main()
{
    int a = 1;
    int aa = 11;
}

预处理阶段的具体替换过程:

  1. 处理int a = 1;:

    • 首先,宏a被替换为aa;
    • 接着,aa作为已定义的宏,会被替换为a;
    • 预处理器检测到继续替换a会回到初始宏,触发递归,因此停止展开,最终这条语句变为int aa = 1;。
  2. 处理int aa = 11;:

    • 首先,宏aa被替换为a;
    • 接着,a作为已定义的宏,会被替换为aa;
    • 同样触发递归检测,停止展开,最终这条语句变为int a = 11;。

编译后的代码等价于:

int main()
{
    int aa = 1;
    int a = 11;
}

因此变量a的取值为11。

内容的提问来源于stack exchange,提问作者LZB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:26:16