Chinaunix首页 | 论坛 | 博客
  • 博客访问: 505535
  • 博文数量: 111
  • 博客积分: 3160
  • 博客等级: 中校
  • 技术积分: 1982
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-24 11:49
个人简介

低调、勤奋。

文章分类

全部博文(111)

文章存档

2014年(2)

2013年(26)

2012年(38)

2011年(18)

2010年(27)

分类: C/C++

2010-05-11 17:02:40

函数式宏定义和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。

在asterisk源码中就有很多这样的例子:

如:
#define CLEANUP(ast, p) do { \
int x; \
if (p->chan) { \
for (x=0;x
if (x != AST_TIMING_FD) \
ast->fds[x] = p->chan->fds[x]; \
} \
ast->fds[AST_AGENT_FD] = p->chan->fds[AST_TIMING_FD]; \
} \
} while(0)

由于宏定义末尾不能加分号,因此这里均采用do while的形式,只执行第一次,有点技巧。
阅读(1685) | 评论(0) | 转发(0) |
0

上一篇:大小端问题

下一篇:c中的时间处理函数

给主人留下些什么吧!~~