#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)
这里的问题是PROD是一个宏,并且不会像你想要的那样表现.因此,它看起来像这样:
k = p+1*p+1
Run Code Online (Sandbox Code Playgroud)
这当然意味着你有:
k = 3+1*3+1 = 7
Run Code Online (Sandbox Code Playgroud)
预处理器扩展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)