C語言的可變引數

2021-06-09 17:27:22 字數 777 閱讀 6767

//我這是vc2008 (sp1)

void fun(int i, ...)

{ // 在vadefs.h中,va_list 的定義是:typedef char * va_list;

va_list arg_ptr;

//va_start用於初始化這個char*,

//第乙個引數是想要初始化的指標,第二個引數是「...」前面的變數名(這裡是 i)

va_start(arg_ptr, i);

//下面的 va_arg 用於讀取「...」中的引數。

//下面是第一次呼叫 va_arg,所以讀取的是「...」中的第乙個變數

//va_arg的第乙個引數是初始化過的char*變數,第二個引數是「...」中第乙個變數的型別,這裡是int

//這裡在main函式中第乙個12對應i變數, 第二個34對應「...」中的第乙個引數,也就是這裡讀到的j變數

int j = va_arg(arg_ptr, int);

//下面第二次呼叫 va_arg,所以讀取的是「...」中的第二個變數,也就是 3.1415926

double d= va_arg(arg_ptr, double);

//va_end表示用完char*變數

va_end(arg_ptr);

//輸出

c 語言可變引數

1 當無法列出傳遞函式的所有實參的型別和數目時,可用省略號指定參數列 void foo void foo parm list,2 函式引數的傳遞原理 函式引數是以資料結構 棧的形式訪問,從右至左入棧.eg include void fun int a,int main output 12 343 獲...

c語言可變引數

ifdef debug print info x printk x,else print info x endif 一 什麼是可變引數 我們在c語言程式設計中有時會遇到一些引數個數可變的函式,例如printf 函式,其函式原型為 int printf const char format,它除了有乙個...

C語言可變引數

在gnu c中,巨集可以接受可變數目的引數,就象函式一樣,例如 1 2 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadic macros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 1 voidprintf...