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

C 为什么我的代码输出错误?,c,c-preprocessor,C,C Preprocessor,我正在运行下面的代码: #include<stdio.h> #define x 5+2 int main() { int p; p = x*x*x; printf("%d",p); } #包括 #定义x5+2 int main(){ INTP; p=x*x*x; printf(“%d”,p); } 我希望输出为343,但答案是27。为什么会这样?我不明白为什么会发生这种事。请帮忙。这就是为什么它是27而不是343:之前的-!看看这个: #includ

我正在运行下面的代码:

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

int main() {

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

}
#包括
#定义x5+2
int main(){
INTP;
p=x*x*x;
printf(“%d”,p);
}

我希望输出为
343
,但答案是
27
。为什么会这样?我不明白为什么会发生这种事。请帮忙。

这就是为什么它是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;

}
或者用以下行定义它:

#define x (5+2)
结果是343


作为参考,请在此处查看C运算符prevene:

x*x*x
with
#define x 5+2
将扩展到

p = 5 + 2 * 5 + 2 * 5 + 2
p = (5 + 2) * (5 + 2) * (5 + 2) // -> 7 * 7 * 7 -> 343
因此您将有
5+10+10+2=27
,您必须添加括号

#define x (5 + 2)
然后它会扩展到

p = 5 + 2 * 5 + 2 * 5 + 2
p = (5 + 2) * (5 + 2) * (5 + 2) // -> 7 * 7 * 7 -> 343
#define
不定义变量,它定义宏


有关详细信息,请参阅。

宏展开后

p=x*x*x;  
将是

p = 5+2*5+2*5+2;
答复:27

使用:


定义5+2是什么?什么是
x
?请使用所有警告和调试信息进行编译(
gcc-Wall-Wextra-g
)。编译器应该已经警告过你了。然后学习如何使用调试器。我已经编辑了我的代码。请再次检查。对于键入错误,请更改为
#define x(5+2)
。然后在任何地方使用
x
都会得到预期的结果,明白了:)谢谢你的回答:)你能举出任何我可以了解的资源吗?#定义和它的功能?@Rishu,不客气!这不是一个定义问题,这是运算符的优先级问题,我在答案中添加了一个链接,以便您可以查看@里泽尔123:谢谢!是的,我了解它的优先级。我也不了解#定义,如果可能的话,你能举出任何来源吗。我将不胜感激:)Thanks@Rishu当然,看看这个:这是关于C预处理器指令的(包括
#define
)没有好的理由进行否决,这个答案有什么问题吗?我没有否决,朋友!我甚至没有太多的名声可以投反对票。虽然我还是一个初学者,但这个问题真的很糟糕吗?我得到了两张反对票:)无论如何,谢谢你的回答:)@Rishu肯定不是你,但显然有人这么做是因为你的名声太大了,他们想除掉它:),只是如果这个答案有什么问题,我想知道。@Rishu,你需要阅读关于c预处理器的内容,看看我的答案,现在我添加了一个链接。
#define x (5+2)