gpt4 book ai didi

带有表达式不需要的结果的 C 宏

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:29 26 4
gpt4 key购买 nike

我正在运行以下程序并得到结果 9 7,我明白为什么输出是 9 但我不明白为什么输出是 7。

#include<stdio.h>
#define sqr(i) (i*i)

int main()
{
printf("%d %d", sqr(3), sqr(3+1));
return 0;
}

对于 sqrt(3+1) 的第二个函数,micro 如何扩展以及我如何获得 7 输出?

最佳答案

您可以让编译器或 IDE 预处理文件并向您展示宏是如何展开的。

在您的例子中,sqr(3+1) 扩展为 (3+1*3+1)。现在 C 运算符的优先级意味着乘法在加法之前完成。所以 (3+1*3+1) -> (3+3+1) -> (7)

您可以通过以这种方式定义宏来解决此问题,并在参数周围加上括号:

#define sqr(i) ((i)*(i))

关于带有表达式不需要的结果的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44712140/

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