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