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

C语言宏比较结果异常:为何输出10而非预期的20?

问题:宏条件判断不符合预期的原因

我们通过#define A double将宏A定义为double,预期通过条件宏定义让X的值为20,但实际运行后输出结果为10,这是为什么?

对应的代码如下:

#define A double

#if A == float
    #define X 10
#elif A == double
    #define X 20
#endif

int main() {
    return X;
}
原因分析

C预处理器处理#if这类条件编译指令时,会把未定义的标识符直接解析为0。这里的float和double都是C语言的关键字,但它们并不是预定义的宏常量,所以在条件判断中:

  • A被替换为double,此时#if A == float就变成了#if double == float
  • 由于double和float都没有被定义为宏,预处理器会把它们都当作0处理,条件0 == 0成立,于是X被定义为10,后面的#elif分支不会执行。
解决方法

如果要通过宏实现这类类型相关的条件判断,需要用自定义的宏常量来标识类型,比如:

// 自定义宏标识不同类型
#define TYPE_FLOAT 1
#define TYPE_DOUBLE 2

#define A TYPE_DOUBLE

#if A == TYPE_FLOAT
    #define X 10
#elif A == TYPE_DOUBLE
    #define X 20
#endif

int main() {
    return X;
}

这样预处理器就能正确识别宏的值,执行预期的分支,最终X会被定义为20。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:07:20