C 可變引數 stdarg h

2021-09-04 02:28:12 字數 907 閱讀 2547

c語言 stdarg.h標頭檔案定義了乙個使用可變引數的方法,可以用來定義引數個數不固定的函式,其步驟如下:

1. 提供乙個使用省略號的函式原型

2. 在函式定義中建立乙個va_list型別的變數

3. 用巨集 va_start()把該變數初始化為乙個引數列表

4. 用巨集va_arg()訪問引數列表

5. 用巨集va_end()完成清理工作

宣告的函式原型至少有乙個形參列表和乙個省略號,並且省略號只能出現在形參列表的最後,例如:

void f1(int n, ...);    // 有效,其中 n 為parmn形參,表示可變引數的個數

void f2(const char *s, int k, ...); // 有效,其中 k 為parmn形參,表示可變引數的個數

char f3(cahr c1, ..., char c2); // 無效,... 只能出現在可變引數列表最後

double f4(...); // 無效,至少有乙個形參(parmn形參),來指明可變引數的個數

對使用可變引數中的巨集的解釋:

1. va_list:用來儲存形參對應的形參列表中省略號部分的資料物件

2. va_start:把引數列表拷貝到va_list型別的變數中。該巨集有兩個引數:va_list變數和parmn形參

3. va_arg:返回形參列表中的項。該巨集接受兩個引數:va_list型別的變數和型別名(如int ,double或其它型別)

4. va_end:清理,清理後,va_list型別的變數變不可在用

示例:

double sum(int lim, ...)

說明:摘自《c primer plus》第16章 c預處理器和c庫 16.14 可變引數:stdarg.h

C語言可變引數stdarg h

title date br description c語言可變引數stdarg.h 2020 04 14 03 54 25 0700 可變引數 c語言 stdarg.h中提供了可變引數的寫法 這種函式的原型應該有乙個形參列表,其中至少有乙個形參和乙個省略號,比如,省略號必須是最後乙個引數,省略號的前...

stdarg h編寫可變引數函式

一.起因 起因是自己想寫乙個簡單的列印日誌的函式,最大的問題是,每次列印的時候輸入資料的個數是不同的。最開始的想法是用巨集,這樣就不管輸入引數多少了,但是用巨集的話就沒辦法判斷輸入引數的型別了。所以就想使用可變引數來實現,那麼問題來了,我首先得學學怎麼寫可變引數函式。吶,stdarg.h可以幫助我。...

C語言函式可變引數總結 stdarg h

stdarg.h標頭檔案中定義了一系列巨集以及資料物件,用於支援可變引數的函式。主要有 va list 定義的資料物件 用於存放可變引數列表 省略號部分 代表的參量 va start ap,v 用於將可變引數列表中第乙個參量的位址複製給va list定義的資料物件 va arg ap,t 用於訪問可...