將變數參數傳遞給具有變數參數清單的函數
當使用接受可變數量參數的函數時,通常需要呼叫一個這樣的函數來自另一個函數。但是,如果目標函數已在其他地方使用,則直接將參數從一個函數傳遞到另一個函數可能會出現問題,而不修改目標函數。
考慮以下範例:
void example(int a, int b, ...); void exampleB(int b, ...);
在此場景中,範例呼叫 exampleB。但是,問題來了:如何在不修改原始實作的情況下將 example 中的變數參數傳遞給 exampleB?
直接將參數從 example 傳遞到 exampleB 是不可能的。相反,必須建立一個採用 va_list 的中間函數:
#include <stdarg.h> static void exampleV(int b, va_list args); 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); } static void exampleV(int b, va_list args) { ...whatever you planned to have exampleB do... ...except it calls neither va_start nor va_end... }
透過引入 exampleV(它同時採用 b 和 args 作為參數),exampleA 可以將其變數參數傳遞給 exampleB,而無需修改其實作。然後可以使用這個中間函數來執行預期的操作,而不會破壞 exampleB 的原始實作。
以上是如何使用變數參數列表將變數參數從一個函數傳遞到另一個函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!