#include<stdio.h>
#include<conio.h>
#define square(v) v*v
void main()
{
int p=3;
int s=square(++p);
printf("%d %d",s,p);
getch();
}
输出为什么16 4不是输出? (Advance thanks)#定义奇怪
#include<stdio.h>
#include<conio.h>
#define square(v) v*v
void main()
{
int p=3;
int s=square(++p);
printf("%d %d",s,p);
getch();
}
输出为什么16 4不是输出? (Advance thanks)#定义奇怪
的
++p * ++p
的行为是不确定的,它取决于编译器
您可以使用inline将
inline int square(int p) {
return p * p;
}
见示例http://stackoverflow.com/questions/3605005/evaluate-macro-parameter-once-only解决方法。 – Cascabel