変数引数リストを持つ関数に変数引数を渡す
可変数の引数を受け入れる関数を扱う場合、多くの場合、次の呼び出しが必要になります。そのような機能の 1 つを別の機能と区別します。ただし、ターゲット関数がすでに他の場所で使用されている場合、ターゲット関数を変更せずに、ある関数から別の関数に引数を直接渡すと問題が発生する可能性があります。
次の例を考えてみましょう。
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... }
b と args の両方を引数として受け取る exampleV を導入することにより、exampleA は実装を変更せずにその変数引数を exampleB に渡すことができます。この中間関数を使用すると、exampleB の元の実装を中断することなく、意図したアクションを実行できます。
以上が変数引数リストを使用して、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。