#ifdef _m_alpha
typedef struct va_list;
#else
typedef char * va_list;
#endif
_m_alpha
是指dec alpha
(alpha axp
)架構。所以一般情況下
va_list
所定義變數為字元指標。
需要用到的巨集有:
intsizeof
巨集,獲取型別占用的空間長度,最小占用長度為
int的整數倍:
#define _intsizeof(n) ( (sizeof(n) +sizeof(int) - 1) & ~(sizeof(int) - 1) )
va_start
巨集,獲取可變引數列表的第乙個引數的位址(
ap是型別為
va_list
的指標,
v是可變引數最左邊的引數):
#define va_start(ap,v) ( ap = (va_list)&v+ _intsizeof(v) )
va_arg
巨集,獲取可變引數的當前引數,返回指定型別並將指標指向下一引數(
t引數描述了當前引數的型別):
#define va_arg(ap,t) ( *(t *)((ap +=_intsizeof(t)) - _intsizeof(t)) )
va_end
巨集,清空
va_list
可變引數列表:
#define va_end(ap) ( ap = (va_list)0 )
例如void func ( int m, int n , int i , …)
va_list是c語言中的可變引數列表巨集,實質上是通過找到可變引數在棧中的位址,並按位址取出改位址中的值得過程。
呼叫該函式的(記憶體)過程,例如func( 1 , 2 , 3, 4 )。
1. 首先va_list是乙個指向引數的乙個指標,然後通過va_start對該指標進行初始化,函式func中就是將該指標指向引數4的位址;
將va_list
指標置為
null
va list可變引數的函式
include include include include include char vstrcat const char first,len strlen first va start argp,first while p va arg argp,char t 0 va end argp re...
va list 可變引數
什麼是變長引數?所謂含有變長引數的函式是指該函式可以接受可變數目的形參。例如我們都非常熟悉的 printf,scanf等等。2 變長引數如何實現?首先來看下面這樣乙個例子 include include include void demo char msg,else break para va ar...
C 遍歷可變引數 va list
前言 在c 中使用可變引數可沒c 中那麼方便,使用起來也很麻煩,想盡辦法搜了很多資料仍然無果,但是確有一些心得。文章 1.2.va list va start va arg va end的原理與使用 正文 一.遍歷可變引數 1.1 傳入的時候指定引數個數 void arg cnt intcnt,va...