void
Cプログラミング言語のデータ型ですか? もしそうなら、どのタイプの値を保存できますか? 値を格納するために 、 、 などがある場合、なぜint
必要float
なのですか? そして、ボイドの範囲は何ですか?char
void
3 に答える
Void は (組織的な目的で) データ型と見なされますが、基本的には、「データなし」を表すために、データ型を配置するプレースホルダーとして使用するキーワードです。
したがって、値を返さないルーチンを次のように宣言できます。
void MyRoutine();
ただし、次のように変数を宣言することはできません。
void bad_variable;
ただし、ポインターとして使用する場合は、別の意味になります。
void* vague_pointer;
これはポインターを宣言しますが、それが指しているデータ型を指定しません。
はい、void
タイプです。それがデータ型であるかどうかは、その用語をどのように定義するかによって異なります。C標準はそうではありません。
標準では、「オブジェクト タイプ」という用語が定義されています。C99 以前。void
オブジェクト型ではありません。C11ではそうです。標準のすべてのバージョンで、void
は不完全な型です。C11 で変更されたのは、不完全型がオブジェクト型のサブセットになったことです。これは単なる用語の変更です。(他の種類の型は関数型です。)
C99 6.2.6 パラグラフ 19 は次のように述べています。
void型は空の値のセットで構成されます。完成できない不完全型です。
C11 標準では、文言がわずかに変更されています。
void型は空の値のセットで構成されます。これは、完了することができない不完全なオブジェクト タイプです。
これは、「オブジェクト型」の定義が不完全な型を含むように C11 で変更されたことを反映しています。type の性質については何も変わりませんvoid
。
このvoid
キーワードは、他のコンテキストでも使用できます。
のように、関数プロトタイプの唯一のパラメーター型として、
int func(void)
関数にパラメーターがないことを示します。(C++ はこれに空の括弧を使用しますが、C では別の意味を持ちます。)のように、関数の戻り値の型として、
void func(int n)
関数が結果を返さないことを示します。void*
何を指すかを指定しないポインタ型です。
原則として、これらの使用はすべてtype void
を参照しますが、同じキーワードをたまたま使用する特殊な構文と考えることができます。
C標準ではvoid
、これは完了できない不完全な型であると言われています(完了できる他の不完全な型とは異なります)。sizeof
これは、演算子をに適用できないことを意味しますがvoid
、不完全な型へのポインターを持つことはできます。