C語言中可變引數的用法

2021-05-26 16:27:38 字數 671 閱讀 3437

在c語言中比較常用的可變引數就是printf();函式原型如下:

int printf(const char * format,...);

寫乙個簡單的可變引數:

#i nclude

void va_fun(int i,...);

int main(void)

void va_fun(int i,...)

這樣就實現了乙個簡單的可變引數。其實可變引數是利用巨集來實現的,巨集在引數的堆疊中查詢引數的位置,然後返回。

定義如下:

typedef char * va_list;

#define _intsizeof(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

#define va_start(ap,v) ( ap = (va_list)&v + _intsizeof(v) )

#define va_arg(ap,t) ( *(t *)((ap += _intsizeof(t)) - _intsizeof(t)) )

#define va_end(ap) ( ap = (va_list)0 )

其實就是計算引數堆疊中的記憶體位址。

建議少用可變引數,在c++中用多型實現就可以。

printf中根據format中的引數的個數確定後面引數的個數。

C語言中可變引數的用法

c語言中可變引數的用法 我們在c語言程式設計中會遇到一些引數個數可變的函式,例如printf 這個函式,它的定義是這樣的 int printf const char format,它除了有乙個引數format固定以外,後面跟的引數的個數和型別是 可變的,例如我們可以有以下不同的呼叫方法 printf...

C語言中可變引數的用法

在c語言中比較常用的可變引數就是printf 函式原型如下 int printf const char format,寫乙個簡單的可變引數 include void va fun int i,int main void void va fun int i,這樣就實現了乙個簡單的可變引數。其實可變引數...

C語言中可變引數的用法

我們在c語言程式設計中會遇到一些引數個數可變的函式,例如printf 這個函式,它的定義是這樣的 int printf const char format,它除了有乙個引數format固定以外,後面跟的引數的個數和型別是可變的,例如我們可以有以下不同的呼叫方法 printf d i printf s...