gpt4 book ai didi

c - 当用作较大数学表达式的一部分时,使用宏会导致输出不正确 - 为什么会发生这种情况?

转载 作者:太空狗 更新时间:2023-10-29 17:14:40 24 4
gpt4 key购买 nike

这是我在某个题库中找到的一个普通的C例程程序。如下图所示:

#define CUBE(p) p*p*p

main()
{
int k;
k = 27 / CUBE(3);
printf("%d", k);
}

根据我的理解和知识,K 的值应该是 1,因为 CUBE(3) 在预处理期间将被 3*3*3 替换,在随后的编译之后它将给出值 1,但是它有显示了 81 的值,这让我很好奇它是如何发生的。

任何人都可以证明上面这个问题的 81 的答案是正确的。

最佳答案

预处理器只是替换

CUBE(3)

3*3*3

所以你最终得到:

k=27/3*3*3

根据运算符优先级从左到右求值,实际上是 81。

如果您在宏周围添加圆括号,您应该会发现结果是正确的:

#define CUBE(p) (p*p*p)

如果 p 的每个实例也用圆括号括起来会更好,如:

#define CUBE(p) ((p)*(p)*(p))

这将允许您将表达式正确地传递给宏(例如,1 + 2)。

关于c - 当用作较大数学表达式的一部分时,使用宏会导致输出不正确 - 为什么会发生这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2115095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com