为什么它返回-8而不是-4..?

#include <stdio.h>  
#define foo(x,y) x/y +x     
int main()
    {
        int i=-6,j=3;
        printf("%d",foo(i+j,3));
    }

问题; 这段代码给出了答案 -8

是不是在数学上返回-4 .. 请解释..帮助

回答

foo(x,y)被定义为x/y +x,所以foo(i+j,3)扩展为i+j/3 +i+j。由于/优先级高于+,这等同于i + (j / 3) + i + j(i + j) / 3 + i + j你大概预期。

在这种情况下,最好的解决方法是不使用宏,而是只编写一个普通函数:

int foo(int x, int y) {
    return x / y + x;
}

如果出于某种原因,这不是一个选项,那么您需要添加一些括号:

#define foo(x,y) ((x) / (y) + (x))

. . . 但即使这样,如果x有副作用,也会产生奇怪的结果,因为它x被扩展了两次,所以这些副作用会发生两次。(并且在某些情况下会导致未定义的行为。)


以上是为什么它返回-8而不是-4..?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>