C99 で不明な数のパラメーターを受け取る関数 (戻り値の型は定数) を (可能であれば) どうすれば記述できますか?
質問する
31245 次
1 に答える
36
はい、Variadic 関数と呼ばれるものを使用して C で実行できます。たとえば、標準printf()
とscanf()
関数がこれを行います。
パラメーターの可変数を配置する最後のパラメーターとして、省略記号 (3 つのドット) を配置します。
パラメータにアクセスするには、<stdarg.h>
ヘッダーを含めます。
#include <stdarg.h>
そして、va_list
渡された引数のリストを提供する特別な型があり、va_start
、va_arg
およびva_end
マクロを使用して引数のリストを反復処理できます。
例えば:
#include <stdarg.h>
int myfunc(int count, ...)
{
va_list list;
int j = 0;
va_start(list, count);
for(j=0; j<count; j++)
{
printf("%d", va_arg(list, int));
}
va_end(list);
return count;
}
呼び出しの例:
myfunc(4, -9, 12, 43, 217);
完全な例はWikipediaにあります。
このcount
例のパラメーターは、呼び出された関数に渡される引数の数を伝えます。printf()
とフォーマット文字列を介してそれをscanf()
見つけますが、単純なcount
引数でもそれを行うことができます。場合によっては、コードで負の整数やヌル ポインターなどのセンチネル値が使用されます (
execl()
例を参照)。
于 2012-04-09T09:19:28.943 に答える