这个程序是如何运行的?

时间:2013-11-29 17:23:19

标签: c c-preprocessor

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

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

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

4 个答案:

答案 0 :(得分:7)

#define'常量按字面顺序插入到代码中,因此有效地

int a = 10+10*10+10;

被解析为

(10 * 10) + 20 = 120;

N常数STAYS 10+10的值。它未被评估/存储为20

答案 1 :(得分:1)

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

答案 2 :(得分:0)

在你的计划中:

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

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

定义将为N的值改变N,然后进行计算,所以:

int a = 10+10*10+10;

int a = 10+100+10;

a = 120;

您需要做的是:

#define N (10+10)

因此,当你加上括号时,首先计算总和,然后计算乘法。

答案 3 :(得分:0)

变成

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

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

常数是10 + 10,而不是20.这种情况随处可见。