这几天在复习预处理,为了区别宏定义和函数的区别,有以下两个程序。
程序一:
main(){
int i=1;
while(i<=5)
printf("%d/n",SQ(i++));
}
SQ(int y)
{
return((y)*(y));
}
程序二:
#define SQ(y) ((y)*(y))
main(){
int i=1;
while(i<=5)
printf("%d/n",SQ(i++));
}
程序一的运行结果很简单,应该是1~5的平方,但是程序二结果应是2,12,30,因为使用宏定义时第一次y是1,之后加1变为2,就是1*2,接下来是3*4,5*6,循环停止,但是我在Linux下用gcc编译后,出现的结果是1,9,25,它的做法是1*1之后再分别自增一次,这样与之前的分析不符合,我又换了turbo C运行,结果是2,12,30,可见gcc和turbo C还是有区别的。