66

voidCプログラミング言語のデータ型ですか? もしそうなら、どのタイプの値を保存できますか? 値を格納するために 、 、 などがある場合、なぜint必要floatなのですか? そして、ボイドの範囲は何ですか?charvoid

4

3 に答える 3

96

Void は (組織的な目的で) データ型と見なされますが、基本的には、「データなし」を表すために、データ型を配置するプレースホルダーとして使用するキーワードです。

したがって、値を返さないルーチンを次のように宣言できます。

void MyRoutine();

ただし、次のように変数を宣言することはできません。

void bad_variable;

ただし、ポインターとして使用する場合は、別の意味になります。

void* vague_pointer;

これはポインターを宣言しますが、それが指しているデータ型を指定しません。

于 2010-08-15T14:13:01.143 に答える
34

はい、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を参照しますが、同じキーワードをたまたま使用する特殊な構文と考えることができます。

于 2012-12-27T20:21:43.180 に答える
8

C標準ではvoid、これは完了できない不完全な型であると言われています(完了できる他の不完全な型とは異なります)。sizeofこれは、演算子をに適用できないことを意味しますがvoid、不完全な型へのポインターを持つことはできます。

于 2012-12-27T20:11:54.013 に答える