【问题标题】:How does the program work? [duplicate]这个程序是如何运行的? [复制]
【发布时间】:2013-11-29 17:23:18
【问题描述】:

我期待以下程序的答案为 400 ...但为什么是 120?

#include<stdio.h>
#define N 10+10

int main()
{
    int a = N*N;
    printf("%d", a);
}

【问题讨论】:

  • 因为您在宏定义周围缺少括号。考虑宏展开后的操作顺序。

标签: c c-preprocessor


【解决方案1】:

#define'd 常量按字面意思插入到代码中,所以你有

int a = 10+10*10+10;

解析为

(10 * 10) + 20 = 120;

N 常量 STAYS 10+10 的值。它没有被评估/存储为20

【讨论】:

    【解决方案2】:

    你正在这样做10+10*10+10 请改用此#define N (10+10)

    【讨论】:

    • 不,使用不是宏的东西!
    • 使用任何不是宏的东西。
    【解决方案3】:

    在你的程序中:

    #include<stdio.h>
    #define N 10+10
    
    int main()
    {
        int a = N*N;
        printf("%d", a);
    }
    

    define会将N换成N的值,然后进行计算,所以:

    int a = 10+10*10+10;
    
    int a = 10+100+10;
    
    a = 120;
    

    你需要做的是:

    #define N (10+10)
    

    所以,当你放括号时,先计算总和,然后计算乘法。

    【讨论】:

      【解决方案4】:

      变成了

      #include<stdio.h>
      #define N 10+10
      
      int main()
      {
          int a = 10+10*10+10;
          printf("%d", a);
      }
      

      常数是 10+10,而不是 20。这会到处乱扔。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-28
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多