C C 函式變長引數列表實現

2021-05-23 11:57:08 字數 967 閱讀 6176

在c編譯器通常提供了一系列處理可變引數的巨集,實現就像printf()那樣的變長引數列表,這樣可以遮蔽不同的硬體平台造成的差異,增加程式的可移植性。這些巨集包括va_startva_argva_end等,這些巨集都是在標頭檔案裡定義的。

採用ansi標準形式時,引數個數可變的函式原型宣告是:

type funcname(type para1, type para2, ...)

這種形式

至少需要乙個普通的形式引數,後面的省略號不表示省略,而是函式原型的一部分。type是函式返回值和形式引數的型別。

不同的編譯器,對這個可變長引數的實現不一樣 ,gcc4.x中是採用內建函式的方法來實現。

接下來我們看看以下示例**:

#include

#include

intsum (int n, ...)

return sum;

}int main(void)

當我們呼叫sum函式時,傳遞給sum函式的引數列表的第乙個引數n的值是5,va_start 初始化p使其指向第乙個未命名的引數(n是有名字的引數) ,也就是1(第乙個),每次對 va_arg的呼叫,都將返回乙個引數,並且把 p 指向下乙個引數,va_arg 用乙個型別名來決定返回的引數是何種型別,以及在 var_arg的內部實現中決定移動多大的距離才到達下乙個引數。

void addtext(hwnd hwndlb, pctstr pszformat, ...)

addtext(null, text("[%d] nothing to process"), num);

C C 變長引數列表

c 程式設計師經常需要處理c語言下程式 這裡,先展示一下,c 中用c語言的方法寫乙個帶有變長引數的函式,and呼叫。include using std cout using std endl include 等等用到的巨集定義va list等等在這個c的標頭檔案中 帶有變長引數的函式,實現n個dou...

變長引數列表函式

可變引數列表 標頭檔案提供了遍歷未知數目和型別的函式引數表的功能。該標頭檔案的實現因不同的機器而不同,但提供的介面是一致的。假定函式 f 帶有可變數目的實際引數,lastarg 是它的最後乙個命名的形式引數 引數列表必須至少包括乙個命名引數 那麼,在函式 f 內宣告乙個型別為 va list 的變數...

變長引數列表函式

可變引數列表 標頭檔案提供了遍歷未知數目和型別的函式引數表的功能。該標頭檔案的實現因不同的機器而不同,但提供的介面是一致的。假定函式 f 帶有可變數目的實際引數,lastarg 是它的最後乙個命名的形式引數 引數列表必須至少包括乙個命名引數 那麼,在函式 f 內宣告乙個型別為 va list 的變數...