#define很奇怪

时间:2011-10-07 15:50:38

标签: c

#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不作为输出? (预先感谢)

2 个答案:

答案 0 :(得分:12)

宏基本上是文本复制和粘贴。因此,您的++正在重复。

宏正在扩展为:

s = ++p * ++p;

这就是宏的危险。 (在这种情况下,它还会调用未定义的行为)

答案 1 :(得分:3)

的行为
++p * ++p

未定义,取决于编译器

您可以使用内联而不是

inline int square(int p) {
    return p * p;
}