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

使用宏定义实现乘法与加法的C代码未得到预期结果

代码运行结果为8的原因分析

先看你的代码:

#include <stdio.h>
#define sum(x,y) x+y
#define f(x,y) sum(x,y)*2
int main(int argc, char *argv[])
{
    float m=6,n=1;
    int x= f(m,n);
    printf("x is %d\n",x);  
}

问题出在宏的文本替换特性——宏不是函数,只会做单纯的字符串替换,不会自动保留运算优先级。

  1. 调用f(m,n)时,宏会先展开sum(x,y),最终得到的表达式是:
    m+n*2
    而非你预期的(m+n)*2。

  2. C语言中乘法*的优先级高于加法+,实际计算顺序是:
    先算n*2(即1*2=2),再加上m(6),最终结果为6+2=8。

  3. 最后将float类型的8.0赋值给int变量x,输出结果就是8。

如果要得到预期的(6+1)*2=14,需要给宏的参数和整体加上括号,避免优先级干扰:

#define sum(x,y) (x+y)
#define f(x,y) (sum(x,y)*2)

这样展开后会是((m+n)*2),运算顺序就符合预期了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:29