1)首先在函式裡定義乙個va_list型的變數,這裡是arg_ptr,這個變數是指向引數的指標.
2)然後用va_start巨集初始化變數arg_ptr,這個巨集的第二個引數是第乙個可變引數的前乙個參 數,是乙個固定的引數.
3)然後用va_arg返回可變的引數,並賦值給整數j. va_arg的第二個引數是你要返回的引數 的型別,這裡是int型.
4)最後用va_end巨集結束可變引數的獲取.然後你就可以在函式裡使用第二個引數了.如果函 數有多個可變引數的,依次呼叫va_arg獲取各個引數.
示例,man page的**
#include
#include
#include
#include
void
foo(char *fmt,..
.)va_end(ap);}
int main(
int argc, char *
*argv)
示例2
#include
#include
#include
#include
/* 需要釋放記憶體 *
/void asprintf_disp(const char *fmt,..
.)}/* 需要釋放記憶體 *
/void vasprintf_disp(const char *fmt,..
.)void vsnprintf_disp(const char *fmt,..
.)int main(
int argc, char *
*argv)
#include
#include
#include
#include
/* 需要釋放記憶體 *
/void asprintf_disp(const char *fmt,..
.)}/* 需要釋放記憶體 *
/void vasprintf_disp(const char *fmt,..
.)void vsnprintf_disp(const char *fmt,..
.)int main(
int argc, char *
*argv)
#include
#include
#include
#include
/* 需要釋放記憶體 *
/void asprintf_disp(const char *fmt,..
.)}/* 需要釋放記憶體 *
/void vasprintf_disp(const char *fmt,..
.)void vsnprintf_disp(const char *fmt,..
.)int main(
int argc, char *
*argv)
0
可變引數及可變引數巨集的使用
我們在c語言程式設計中會遇到一些引數個數可變的函式,例如printf 這個函式,這裡將介紹可變函式的寫法以及原理.一般在除錯列印debug 資訊的時候,需要可變引數的巨集.從c99開始可以使編譯器標準支援可變引數巨集 variadic macros 另外gcc 也支援可變引數巨集,但是兩種在細節上可...
可變引數使用
在c中,可變引數用於引數個數,型別不確定的情況,如printf,snprintf函式的實現。當我們無法列出傳遞函式的所有實參的型別和數目時,可以用省略號指定參數列 void func void func parm list,這是c傳參的一種形式,與固定引數不同。函式引數以棧的形式儲存,從右往左入棧。...
C C 可變引數的使用
可變引數即表示引數個數可以變化,可多可少,也表示引數的型別也可以變化,可以是int,double還可以是char 類,結構體等等。可變引數是實現printf sprintf 等函式的關鍵之處,也可以用可變引數來對任意數量的資料進行求和,求平均值帶來方便 不然就用陣列或每種寫個過載 在c 中有專門的關...