这几天在复习预处理,为了区别宏定义和函数的区别,有以下两个程序。
程序一:
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还是有区别的。
本文通过两个简单的程序实例,解释了宏定义和函数的区别,并对比了GCC和Turbo C在编译结果上的差异。在GCC环境下,宏定义的处理方式导致了与预期不同的输出结果;而在Turbo C环境下,结果符合预期。
1174

被折叠的 条评论
为什么被折叠?



