【发布时间】: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
我期待以下程序的答案为 400 ...但为什么是 120?
#include<stdio.h>
#define N 10+10
int main()
{
int a = N*N;
printf("%d", a);
}
【问题讨论】:
标签: c c-preprocessor
#define'd 常量按字面意思插入到代码中,所以你有
int a = 10+10*10+10;
解析为
(10 * 10) + 20 = 120;
N 常量 STAYS 10+10 的值。它没有被评估/存储为20。
【讨论】:
你正在这样做10+10*10+10
请改用此#define N (10+10)。
【讨论】:
在你的程序中:
#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)
所以,当你放括号时,先计算总和,然后计算乘法。
【讨论】:
变成了
#include<stdio.h>
#define N 10+10
int main()
{
int a = 10+10*10+10;
printf("%d", a);
}
常数是 10+10,而不是 20。这会到处乱扔。
【讨论】: