Cでは、構造体の中に含まれている配列の中に、配列の要素の間にパディングが追加されている可能性があるという噂を聞きました。明らかに、パディングの量は要素のペア間で変化することはできません。または、配列内の次の要素を計算することは、単純なポインター演算では不可能です。
この噂では、構造体に含まれていない配列にはパディングが含まれていないことが保証されているとも述べられています。私は少なくともその部分が真実であることを知っています。
したがって、コードでは、噂は次のとおりです。
{
// Given this:
struct { int values[20]; } foo;
int values[20];
// This may be true:
sizeof(values) != sizeof(foo.values);
}
私はそれsizeof(values)
が常に等しくなるとかなり確信していsizeof(foo.values)
ます。ただし、これを明示的に確認または拒否するC標準(具体的にはC99)には何も見つかりませんでした。
この噂がC規格で扱われているかどうか誰かが知っていますか?
編集:配列foo.values
の終わりと構造体の終わりの間にパディングがある可能性がfoo
あり、標準では、の開始foo
と開始の間にパディングがないと規定されていることを理解していますfoo.values
。しかし、誰かが標準からの引用または参照を持っていますか?それはの要素の間にパディングがないと言っていますfoo.values
か?