我正在运行下面的程序,得到的结果是97,我知道为什么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是如何扩展的,Im是如何获得7个输出的?

最佳答案

您可以让编译器或IDE对文件进行预处理,并显示宏是如何展开的。
在您的情况下,sqr(3+1)扩展为(3+1*3+1)。现在C运算符的优先级意味着乘法是在加法之前完成的。所以。
可以通过这样定义宏来解决此问题,在参数周围加上括号:

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

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

10-11 18:36