#include<stdio.h>
#define SQ(x) ((x)*(x))
main()
{
int i = 1;
while( i<=5 ){
printf("result : %d\n", SQ(i++));
}
}
执行窗口:
结果:2 结果:12 结果:30
我打算这样做:
结果:1 结果:4 结果:9 结果:16 结果:25
我应该如何修改此代码?
答案 0 :(得分:1)
SQ(i++) -> (i++)*(i++)
使用此:
printf("result : %d\n", SQ(i));
i++;
答案 1 :(得分:0)
宏可以多次评估其参数。这是因为#define
以文本方式替代,而不考虑C语言规则。预处理器用{/ p>替换SQ(i++)
((i++)*(i++))
在此表达式中,i++
完成两次,而不是一次。
这就是为什么不推荐使用#define
的原因。为您想要的行为写一个常规函数。或者,使用SQ
参数调用i
,并且只有在通话后写下i++
:
SQ(i);
i++;