va_list簡介[轉]

有這麼幾個成員:

1) va_list型變量:

#ifdef _M_ALPHA
typedef struct {
char *a0;
int offset;
} va_list;
#else
typedef char * va_list;
#endif


2)_INTSIZEOF 宏,獲取類型佔用的空間長度,最小佔用長度爲int的整數倍:
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )


3)VA_START宏,獲取可變參數列表的第一個參數的地址(ap是類型爲va_list的指針,v是可變參數最左邊的參數):
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )

4)VA_ARG宏,獲取可變參數的當前參數,返回指定類型並將指針指向下一參數(t參數描述了當前參數的類型):
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

5)VA_END宏,清空va_list可變參數列表:
#define va_end(ap) ( ap = (va_list)0 )
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章