変数引数リストを使用する関数を扱う場合、ある関数から変数を受け入れる別の関数に引数を渡すという課題が発生します。同様のリストが生じる可能性があります。
次のことを考慮してください。例:
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 (一貫性のために名前変更されました) は、このヘルパーを利用するように変更されていますfunction:
void exampleA(int a, int b, ...) { va_list args; do_something(a); // Use argument a somehow va_start(args, b); exampleV(b, args); va_end(args); }
exampleB も、変更せずに同じヘルパー関数を使用できます:
void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); }
exampleV 内では、exampleB で実行される予定だった実際の操作を実行できます。 va_start や va_end は必要ありません。
static void exampleV(int b, va_list args) { ...whatever you planned to have exampleB do... ...except it calls neither va_start nor va_end... }
このアプローチを採用することで、効果的に変数を渡すことができます。 2 番目の関数の元の実装を変更することなく、ある関数から別の関数に引数を渡すことができます。
以上が変数引数リストを使用して、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。