C語言中可變引數的用法

2021-04-21 10:01:06 字數 675 閱讀 3683

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

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

寫乙個簡單的可變引數:

#include 

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,寫乙個簡單的可變引數 i nclude 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...