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

为什么“a”的输出是-80?

  •  2
  • Abhineet  · 技术社区  · 14 年前
    #include<stdio.h>
    #include<conio.h>
    #define ABC 20
    #define XYZ 10
    #define XXX ABC - XYZ
    
    void main()
    {
        int     a;
    
        a = XXX * 10;
    
        printf("\n %d \n", a);
    
        getch();
    }
    

    我认为输出应该是100,但是当我看到结果时,我发现输出是-80 #define XXX (ABC-XYZ) 然后我得到的输出是100,但是没有括号,我得到的输出是-80。

    4 回复  |  直到 8 年前
        1
  •  13
  •   Thomas    14 年前

    预处理器是个愚蠢的怪物。它在纯文本级别上工作,而不考虑它在语义上对代码做了什么。让我们看看它在这种情况下的作用:

    a = XXX * 10;
    

    变成

    a = ABC - XYZ * 10;
    

    变成

    a = 20 - 10 * 10;
    

    -80 .

    可能的目的是

    #define XXX (ABC - XYZ)
    

    这就是为什么宏被认为是邪恶的原因之一。

        2
  •  3
  •   codaddict    14 年前
    a = XXX * 10;
    

    a = 20 - 10 * 10;
    

    -80

        3
  •  2
  •   karthi_ms    14 年前

    20-10*10

    #define XXX (ABC-XYZ)
    
        4
  •  2
  •   muruga    14 年前

    这里XXX被ABC-XYZ替换,所以 就像下面的

    20 - 10 * 10