yohhoyの日記

技術的メモをしていきたい日記

空っぽの構造体

メンバ変数を1個ももたない空(empty)の構造体は、C++言語ではwell-definedとされるが、C言語ではill-formedとなる。

// C++: OK / C: NG
struct S { };

GCCでは独自拡張として空の構造体を許容するが、標準C++とは異なり構造体サイズが0となることに注意。

// GNU C拡張
struct S {};
printf("%zu", sizeof(struct S));  // 0
// 標準C++
struct S {};
printf("%zu", sizeof(struct S));  // 1