C語言變參函式的實現原理

2022-08-15 19:12:12 字數 938 閱讀 4614

1. 變參函式簡單示例

#include #include 

int accumlate(int

nr, ...)

va_end(arg);

return

result;

}int

main()

2. 變參函式的實現原理

#define va_list void*

#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))

#define va_arg(arg, type) *((type*)arg); arg = (char*)arg + sizeof(type);

#define va_end(arg) arg = 0;

#include #define va_list void*

#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))

#define va_arg(arg, type) *((type*)arg); arg = (char*)arg + sizeof(type);

#define va_end(arg) arg = null;

int accumlate(int

nr, ...)

va_end(arg);

return

result;

}int

main()

3. 關於引數結束標誌的問題

① 指定引數個數,如示例**

② 用固定值(如-1或null)表示最後乙個引數

③ 用格式化字串,如printf函式

注:變參函式至少要提供乙個引數

C語言(變參函式)

c語言雖然沒有c 的函式過載特性,但也可以實現變參,但要保證第乙個引數資訊的完整性。拓展 定義變參函式時,第乙個引數一般是字串,攜帶後續變參的型別和數量資訊,變參使用三點來表示,如 void sumup const char info,再使用va list va start va arg 和va e...

C語言變參函式的原理與應用

變參函式其實並不罕見,在初學者的的 helloworld 程式中就用到了變參函式 printf 在之後的學習當中,scanf 又是另乙個常見的變參函式。這些函式有以下共同特點 在函式呼叫過程中,相應記憶體的棧空間會增長,這時函式引數會被壓到棧中。在普通函式執行時,函式根據引數列表得知棧內的引數型別以...

C語言中的變參原理

在c c 中,對函式引數的掃瞄是從後向前的。c c 的函式引數是通過壓入堆疊的方式來給函式傳引數的 堆疊是一種先進後出的資料結構 最先壓入的引數最後出來printf的第乙個被找到的引數就是那個字元指標,就是被雙引號括起來的那一部分,函式通過判斷字串裡控制引數的個數來判斷引數個數及資料型別,通過這些就...