1. ホーム
  2. c

[解決済み】C言語での可変個体関数の呼び出しを転送する

2022-04-07 02:25:57

質問

C言語では、可変個体関数の呼び出しを転送することは可能でしょうか?というように。

int my_printf(char *fmt, ...) {
    fprintf(stderr, "Calling printf with fmt %s", fmt);
    return SOMEHOW_INVOKE_LIBC_PRINTF;
}

上記の方法で呼び出しを転送することは、明らかにこの場合厳密には必要ではありません(他の方法で呼び出しを記録したり、vfprintfを使うことができるので)。しかし、私が取り組んでいるコードベースは、ラッパーが何らかの実際の作業をする必要があり、vfprintfのようなヘルパー関数を持っていない(そして追加することができない)のです。

[更新:これまでに提供された回答から、いくつかの混乱があるようです。この質問を別の言葉で表現すると、一般的に、任意の変量関数を その関数の定義を変更することなく .]

どのように解決するのですか?

に相当する関数がない場合、その関数を使用することができます。 vfprintf を受け取ることができます。 va_list の代わりに可変個数の引数を指定します。 できない . 参照 http://c-faq.com/varargs/handoff.html .

void myfun(const char *fmt, va_list argp) {
    vfprintf(stderr, fmt, argp);
}