將變數參數傳遞給具有變數參數清單的函數
考慮兩個具有相似變數參數的函數:
void example(int a, int b, ...); void exampleB(int b, ...);
假設example 呼叫exampleB,但不修改exampleB (在其他地方使用)。我們如何將變數參數從 example 傳遞到 exampleB?
解:
直接傳遞參數是不可能的。相反,我們建立一個採用va_list 的包裝函數:
#include <stdarg.h> static void exampleV(int b, va_list args);
修改的函數exampleA:
void exampleA(int a, int b, ...) // Renamed for consistency { va_list args; do_something(a); // Use argument a somehow va_start(args, b); exampleV(b, args); va_end(args); }
未修改的函數🎜>
void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); }
包裝函數exampleV:
static void exampleV(int b, va_list args) { // Whatever `exampleB` was intended to do... // Except it doesn't call either `va_start` or `va_end`. }這種方法允許我們將變數參數從 example 傳遞到 exampleB,而不修改後者。包裝函數 exampleV 不會呼叫 va_start 或 va_end,這確保了與 exampleB 現有用法的一致性。
以上是如何在不修改接收函數的情況下將變數參數從一個函數傳遞到另一個函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!