Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263048
  • 博文数量: 45
  • 博客积分: 1618
  • 博客等级: 上尉
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-11 10:13
文章分类

全部博文(45)

文章存档

2012年(1)

2011年(25)

2010年(19)

我的朋友

分类: C/C++

2010-12-14 15:10:52

宏是在编译时期处理的,只是用简单的替换,所以使用时要注意可能不能获取到理想的结果,比如下面简答的程序

#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;
}


阅读(2051) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~