重複の可能性:
空隙のサイズは?
§6.2.5.19 で、預言者たちは次のことを知らせています。
void
タイプは値の空のセットで構成されています
sizeof(void)
では、0 で十分に見えるのに、なぜ1 になるのでしょうか?
sizeof(void)
C コンパイラではコンパイルされません。
ISO 9899:2011 6.2.5/19
「void 型は、値の空のセットで構成されます。これは、完了することができない不完全なオブジェクト型です。」
ISO 9899:2011 6.5.3.4/1
「sizeof 演算子は、関数型または不完全な型を持つ式には適用されません」
これは規範的なテキストです: sizeof(void) は有効ではありません C.
おそらく gcc を使用しているか、これを拡張機能として実行する他のコンパイラを使用しています (C では sizeof(void) は無効です)。
gcc 言います:
GNU C では、void へのポインターと関数へのポインターで加算および減算演算がサポートされています。これは、ボイドまたは関数のサイズを 1 として扱うことによって行われます。
この結果、sizeof は void 型と関数型でも許可され、1 を返します。
オプション -Wpointer-arith は、これらの拡張機能が使用されている場合に警告を要求します。