我正在运行以下代码:
#include<stdio.h>
#define x 5+2
int main() {
int p;
p = x*x*x;
printf("%d",p);
}
我期待343
作为输出,但答案是27
。为什么这样?我无法弄清楚为什么会发生这种情况。请帮忙。
答案 0 :(得分:5)
这就是.
之前的27而不是343:-
的原因!所以看看这个:
#include<stdio.h>
#define x 5+2
int main() {
int p;
p = x*x*x; //5 + 2*5 + 2*5 + 2 -> 5 + (2*5) + (2*5) + 2 -> 5 + 10 + 10 + 2 = 27
printf("%d",p);
return 0;
}
您必须将其更改为:
p = (x)*(x)*(x);
或者用这一行定义:
#define x (5+2)
结果是343
作为参考,请看一下C运算符的先行词:http://en.cppreference.com/w/c/language/operator_precedence
答案 1 :(得分:4)
p = 5+2*5+2*5+2
ans:27
使用:
#define x (5+2)
答案 2 :(得分:2)
x * x * x
的 #define x 5 + 2
将扩展为
p = 5 + 2 * 5 + 2 * 5 + 2
因此您将拥有5 + 10 + 10 + 2 = 27
,您必须添加括号
#define x (5 + 2)
然后它将扩展为
p = (5 + 2) * (5 + 2) * (5 + 2) // -> 7 * 7 * 7 -> 343
#define
没有定义变量,它定义了宏。
您可以阅读c preprocessor了解更多信息。
答案 3 :(得分:0)
宏观扩张后
p=x*x*x;
将是
p = 5+2*5+2*5+2;