代码之家  ›  专栏  ›  技术社区  ›  user8412666

#定义func(x,y)x+y/x[重复]

  •  1
  • user8412666  · 技术社区  · 7 年前
    #include <stdio.h>
    #define func(x, y) x + y/x
    int main() {
        int i = -1, j = 2, x;
        printf("i = %d\n", i);
        printf("j = %d\n", j);
        printf("x = %d\n", x);
        x = func(i + j, 3);
        printf("%d\n",x);
        return 0;
    }
    

    i + j = -1 + 2 = 1   
    func(i+j, 3) = func (1,3) = 1 + 3/1 = 1 + 3 = 4.   
    

    我哪里错了?我在哪里可以了解更多 C预处理器宏行为?

    上述代码的输出如下:

    Output Console

    1 回复  |  直到 4 年前
        1
  •  3
  •   skr    7 年前

    改变

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

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

    原因:

    func(x, y) x + y/x  
    x = i + j
    y = 3
    func(x, y) = func(i + j, 3)
    =  x + y/x
    =  i + j + 3/i + j
    = -1 + 2 + 3/(-1) + 2
    =  1 - 3 + 2
    =  0