12

重複の可能性:
空隙のサイズは?

§6.2.5.19 で、預言者たちは次のことを知らせています。

voidタイプは値の空のセットで構成されています

sizeof(void)では、0 で十分に見えるのに、なぜ1 になるのでしょうか?

4

3 に答える 3

12

sizeof(void)C コンパイラではコンパイルされません。

ISO 9899:2011 6.2.5/19

「void 型は、値の空のセットで構成されます。これは、完了することができない不完全なオブジェクト型です。」

ISO 9899:2011 6.5.3.4/1

「sizeof 演算子は、関数型または不完全な型を持つ式には適用されません」

これは規範的なテキストです: sizeof(void) は有効ではありません C.

于 2012-05-11T13:22:29.993 に答える
7

おそらく gcc を使用しているか、これを拡張機能として実行する他のコンパイラを使用しています (C では sizeof(void) は無効です)。

gcc 言います:

GNU C では、void へのポインターと関数へのポインターで加算および減算演算がサポートされています。これは、ボイドまたは関数のサイズを 1 として扱うことによって行われます。

この結果、sizeof は void 型と関数型でも許可され、1 を返します。

オプション -Wpointer-arith は、こ​​れらの拡張機能が使用されている場合に警告を要求します。

于 2012-05-11T13:00:54.920 に答える