ホームページ > バックエンド開発 > C++ > 変数引数リストを使用して、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?

変数引数リストを使用して、ある関数から別の関数に変数引数を渡すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-07 03:18:10
オリジナル
844 人が閲覧しました

How to Pass Variable Arguments from One Function to Another with Variable Argument Lists?

変数引数リストを持つ関数に変数引数を渡す

可変数の引数を受け入れる関数を扱う場合、多くの場合、次の呼び出しが必要になります。そのような機能の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート