我听说有传言说,在C中,包含在结构中的数组可能在数组的元素之间添加了填充.显然,填充量不能在任何元素对之间变化,或者使用简单的指针算法计算数组中的下一个元素是不可能的.
这个谣言还指出,结构中没有包含的阵列保证不包含填充物.我知道至少那部分是真的.
因此,在代码中,谣言是:
{
// Given this:
struct { int values[20]; } foo;
int values[20];
// This may be true:
sizeof(values) != sizeof(foo.values);
}
Run Code Online (Sandbox Code Playgroud)
我非常肯定sizeof(values)
会永远相等sizeof(foo.values)
.但是,我无法在C标准(特别是C99)中找到明确证实或否认这一点的任何内容.
有谁知道这个谣言是否在任何C标准中得到解决?
编辑:我知道在数组foo.values
的结尾和结构的结尾之间可能存在填充foo
,并且标准声明在开始foo
和开始之间不存在填充foo.values
.但是,是否有人引用或引用标准,其中表示元素之间没有填充foo.values
?