2012年2月14日 星期二

20120214 va_start, va_end

va_xxx: 處理不定長度的參數時所用。常用於分析程式的input command上。

因為老是忘記va_系列函示的使用法,所以乾脆在blog裡面記錄。
哪天想找說明時,應該會比較快回復記憶吧。

va_系列的函示基本上要先呼叫 va_start(),
最後以va_end()左結尾。中間可以插入va_xxx()的函示。(其實都是MACRO啦)

va_start就像是進入點一樣,初始了一個va_list的參數(於引數的第一欄)。第二欄就是用來放一串不固定參數所能夠確定的最後一個引數。

例如
foo(char* fmt, ...)     //表示最後一個可以確定的引數是fmt
{
           va_list ap;
     
           va_start(ap, fmt)
           va_xxx( )
     
          va_end(ap);
}

PS:
 type va_arg(va_list ap, type);
會取出ap接下來的參數並回傳(所以用來接應回傳值的變數要和引數type的型態相同)。
例如:  d = va_arg(ap, int);
則d也要是整數型態才行。