#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();
}
输出 25 5 为什么16 4不作为输出? (预先感谢)
答案 0 :(得分:12)
宏基本上是文本复制和粘贴。因此,您的++
正在重复。
宏正在扩展为:
s = ++p * ++p;
这就是宏的危险。 (在这种情况下,它还会调用未定义的行为)
答案 1 :(得分:3)
的行为
++p * ++p
未定义,取决于编译器
您可以使用内联而不是
inline int square(int p) {
return p * p;
}