2009-03-01 4 views
49

私は、関数の定義に出くわした:質問(パラメータの3つのドット...)

char* abc(char *f, ...) 
{ 
} 

3つのドットが何を意味するのですか?

+6

このコミュニティはただのawsomeです。 – ashishsony

+1

この質問は私がprintf、scanf非常に多くの時間...しかし、私は決してこれらの機能が無限の引数を受け入れることができる方法をクリックしたことはありません。私は自分自身にそのような質問をずっと頻繁に求めている必要があります。 – ashishsony

答えて

38

楕円形は、引数の数が可変であることを意味します。使用する場所は、printfファンクションファミリです(実際には認識されません)。

パラメータを事前に知られていないそのスタイルの関数を作成することができます。また、varargs関数(va_start,va_argおよびva_end)を使用して特定の引数を取得します。

このリンクhereは、可変引数リストの使用についての良い論文を持っています:printf

11

これらはエリプシスと呼ばれ、関数が不確定な数のパラメータを取ることができることを意味します。関数はおそらく次のように呼び出すことができます:

abc("foo", 0); 
abc("foo", "bar", 0); 

リストの終わりを示す方法が必要です。これは、最初のパラメータをprintf(0フォーマット文字列、または上記の例の特殊ターミネータ、ゼロ)として使用することによって行うことができます。

可変数のパラメータを持つ関数は、C++では

3

これはprintfのある、おそらく認識しますC.

で可変引数関数や変数引数関数と呼ばれるもの

一つです。

関連する問題