宏是在编译时期处理的,只是用简单的替换,所以使用时要注意可能不能获取到理想的结果,比如下面简答的程序
#include<stdio.h>
#define PRODUCT(x) (x*x)
int f_product(int x)
{
return x*x;
}
int main()
{
int i,j,k;
i=3;
j=PRODUCT(i++);//此处的宏会被替换为i++*i++所以是执行了两遍i++
k=PRODUCT(++i);
printf("use a MACRO:%d %dn",j,k);//use a MACRO:9 49
i=3;
j=f_product(i++);
k=f_product(++i);
printf("use a function:%d %dn",j,k);//use a function:9 25
return 0;
}
|
阅读(2088) | 评论(0) | 转发(0) |