2009-10-20 53 views

答えて

4

関数ポインタ型にtypedefを使用します。

3

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); 
} 
+2

、変数名を削除し、その型の変数の宣言を書いて、( 'va_arg'、' sizeof'、型キャストまたは類似で使用するため)タイプ名を作成します。 – caf

+2

実際には、これは(皮肉なことに)typedefが必要な時だけです。 C標準のセクション7.15.1.1のva_argの* type *パラメタについて言えば、: "パラメタタイプは、指定されたタイプを持つオブジェクトへのポインタの型が後置固定によって単に得られるように指定された型名でなければならない*入力する。これは、typedefなしで、あなたの例を含め、多くの非自明な型が動作することが保証されていないことを意味します。 –

+0

私のツールセットではコンパイルされません。 – KeatsPeeks

関連する問題