關於C之可變引數

2021-09-29 11:29:53 字數 1123 閱讀 6241

之前的文章有提到過變參巨集,即該巨集可以接受可變數量的引數。stdarg.h 標頭檔案為函式提供了乙個類似的功能,但是用法比較複雜。必須按如下步驟進行:

1.提供乙個使用省略號(一定是最後的引數)的函式原型;

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

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

4.用巨集訪問引數列表;

5.用巨集完成清理工作。

void f1(int n, ...);           // 有效

int f2(const char * s, int k, ...); // 有效

char f3(char c1, ..., char c2); // 無效,省略號不在最後

double f3(...);           // 無效,沒有形參

省略號的前乙個形參起著特殊的作用,標準中用parmn這個術語來描述該形參。在上面的例子中,第1行f1()中parmn為n,第2行f2()中parmn為k。parmn代表傳遞給該形參的實際引數的數量。

可以這樣使用前面宣告的f1()函式:

f1(2, 200, 400);     // 2個額外的引數

f1(4, 13, 117, 18, 23); // 4個額外的引數

接下來,宣告在stdarg.h中的va_list型別代表一種用於儲存形參對應的形參列表中省略號部分的資料物件。變參函式的定義起始部分類似下面這樣:

double sum(int lim,...) 

【5步曲↓↓↓↓↓】

double sum(int lim, ...)

return value for sum(3, 1.1, 2.5, 13.3):         16.9

return value for sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1):  31.6

第1次呼叫sum()時對3個數求和,第2次呼叫時對6個數求和。

總而言之,使用變參函式比使用變參巨集更複雜(關於c之預處理指令#define巨集及#include),但是函式的應用範圍更廣。

C 之可變引數,ref,out

1 可變引數 在c 4.0中增加了許多新的特性,這裡我主要說一下 可變引數陣列 int sum params int values int sum string name,params int values 注意 可變引數陣列必須是最後乙個,而且可變引數是c4.0中才有的特性。引數預設值 c 4.0...

關於c 可變引數的理解

最近在看cocos2dx的原始碼,發現有很多地方用到了可變引數,就是三個點,然後查了查資料,把自己的思路整理一下,希望能對看到的人有幫助。首先三個點的值傳到了巨集 va args 中 va args 只能在巨集中替換可變引數,下面舉個例子 該例子 於http 具體是那篇我忘了 include inc...

關於C C 可變引數

c c 可變引數例子 include include int proc char fmt,int main 程式結果 test 1 66.000000 函式名 vsprintf 功 能 格式化輸出到串中 用 法 int vsprintf char string,char format,va list...