LINUX 可變引數的使用

2021-07-23 21:23:12 字數 1415 閱讀 5551

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 中有專門的關...