Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1292272
  • 博文数量: 196
  • 博客积分: 4141
  • 博客等级: 中将
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-21 20:04
文章存档

2019年(31)

2016年(1)

2014年(16)

2011年(8)

2010年(25)

2009年(115)

分类: C/C++

2009-03-22 14:26:12

typedef char *va_list;

/* 参数压栈是双字对齐,从左到右,从低地址到高地址的 */

/* Amount of space required in an argument list for an arg of type TYPE.
   TYPE may alternatively be an expression whose type is used. */

#define __va_rounded_size(TYPE) \
   (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
 
/* AP指向可变参数 */
#define va_start(AP, LASTARG) \
  (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))

void va_end (va_list AP)
{
     AP = 0;
}
#define va_end(AP)

/* AP 指向下一个参数, 然后给出当前参数的地址 */
#define va_arg(AP, TYPE) \
 (AP += __va_rounded_size (TYPE), \
  *((TYPE *) (AP - __va_rounded_size (TYPE))))

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