5
私はこれを達成する方法を知らない!
va_list引数に関数ポインタを取得する方法は?
ありがとうございます。可変引数を持つ関数に関数ポインタを渡すには?
私はこれを達成する方法を知らない!
va_list引数に関数ポインタを取得する方法は?
ありがとうございます。可変引数を持つ関数に関数ポインタを渡すには?
関数ポインタ型にtypedefを使用します。
typedefは、多くの場合、関数ポインタを扱いやすくしますが、必要ではありません。一般に
#include <stdarg.h>
void foo(int count, ...) {
va_list ap;
int i;
va_start(ap, count);
for (i = 0; i < count; i++) {
void (*bar)() = va_arg(ap, void (*)());
(*bar)();
}
va_end(ap);
}
、変数名を削除し、その型の変数の宣言を書いて、( 'va_arg'、' sizeof'、型キャストまたは類似で使用するため)タイプ名を作成します。 – caf
実際には、これは(皮肉なことに)typedefが必要な時だけです。 C標準のセクション7.15.1.1のva_argの* type *パラメタについて言えば、: "パラメタタイプは、指定されたタイプを持つオブジェクトへのポインタの型が後置固定によって単に得られるように指定された型名でなければならない*入力する。これは、typedefなしで、あなたの例を含め、多くの非自明な型が動作することが保証されていないことを意味します。 –
私のツールセットではコンパイルされません。 – KeatsPeeks