【例 9.10】
#define SQ(y) ((y)*(y))
main(){
int i=1;
while(i<=5)
printf("%d\n",SQ(i++));
}
在例 9.9 中函数名为 SQ,形参为 Y,函数体表达式为((y)*(y))。在例 9.10 中宏名为 SQ,
形参也为 y,字符串表达式为(y)*(y))。 例 9.9 的函数调用为 SQ(i++),例 9.10 的宏调用为
SQ(i++),实参也是相同的。从输出结果来看,却大不相同。
分析如下:在例 9.9 中,函数调用是把实参 i 值传给形参 y 后自增 1。 然后输出函数值。
因而要循环 5 次。输出 1~5 的平方值。而在例 9.10 中宏调用时,只作代换。SQ(i++)被代换
为((i++)*(i++))。在第一次循环时,由于 i 等于 1,其计算过程为:表达式中前一个 i 初值
为 1,然后 i 自增 1 变为 2,因此表达式中第 2 个 i 初值为 2,两相乘的结果也为 2,然后 i
值再自增 1,得 3。在第二次循环时,i 值已有初值为 3,因此表达式中前一个 i 为 3,后一
个 i 为 4,乘积为 12,然后
松语文学免费小说阅读_www.16sy.com