为什么我的代码输出错误?

时间:2015-01-07 13:16:18

标签: c c-preprocessor

我正在运行以下代码:

#include<stdio.h>
#define x 5+2

int main() {

    int p;
    p = x*x*x;
    printf("%d",p);

}

我期待343作为输出,但答案是27。为什么这样?我无法弄清楚为什么会发生这种情况。请帮忙。

4 个答案:

答案 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;