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

変数引数リストを使用して C 関数間で変数引数を渡すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-12 12:32:13399ブラウズ

How to Pass Variable Arguments Between C Functions with Variable Argument Lists?

変数引数リストを使用して関数間で変数引数を渡す方法

問題:

2 つの関数があります。例( ) と exampleB()、同様の変数引数を使用lists:

void example(int a, int b, ...);
void exampleB(int b, ...);

exampleB() の変数引数リストは他の場所で使用されているため、変更せずに exampleB() 内から example() を呼び出す必要があります。

解決策:

残念ながら、C には変数引数を渡す直接メソッドはありません。これを実現するには、ヘルパーを定義する必要があります。 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() は va_list 引数を取るヘルパー関数です。
  • do_something(a) はexampleA().
  • exampleV() 内で引数を使用する例は、次から呼び出されます。 exampleA() と exampleB() の両方に、対応する変数引数リストを指定します。
  • exampleV() は、本来 exampleB() 用に意図されていた操作を実行しますが、va_start() または va_end() は呼び出しません。

仲介者として exampleV() を追加すると、元の実装を変更せずに可変引数を exampleB() に渡すことができます。

以上が変数引数リストを使用して C 関数間で変数引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。