C程序输出令人困惑

Joh*_*ohn 6 c

#include<stdio.h>
#include<conio.h>
#define PROD(x) (x*x)
void main()
{
clrscr();
int p=3,k;
k=PROD(p+1); //here i think value 3+1=4 would be passed to macro
printf("\n%d",k);
getch();
}
Run Code Online (Sandbox Code Playgroud)

在我看来,输出应该是16,但我明白了7.

谁能告诉我为什么?

CB *_*ley 21

宏已扩展,它们没有传递给它们的值.在分配的语句中看看你的宏扩展到了什么k.

k=(p+1*p+1);
Run Code Online (Sandbox Code Playgroud)

首选宏的函数,如果你必须使用宏,你应该做的最小值是完全括号参数.请注意,如果用户将其与具有副作用的表达式一起使用,即使这样也会有惊喜.

#define PROD(x) ((x)*(x))
Run Code Online (Sandbox Code Playgroud)


mur*_*att 5

这里的问题是PROD是一个宏,并且不会像你想要的那样表现.因此,它看起来像这样:

k = p+1*p+1
Run Code Online (Sandbox Code Playgroud)

这当然意味着你有:

k = 3+1*3+1 = 7
Run Code Online (Sandbox Code Playgroud)


Chr*_*isJ 5

预处理器扩展PROD(p + 1)如下:

k = (p+1*p+1);
Run Code Online (Sandbox Code Playgroud)

当p = 3时,这给出:3 + 1*3 + 1 = 7.

您应该按如下方式编写#define:

#define PROD(x) ((x)*(x))
Run Code Online (Sandbox Code Playgroud)