b1s*_*sub 2 c struct padding language-lawyer
正如C11草案所述,我可以向这两个人保证:
...结构对象中可能有未命名的填充,但不是在它的开头.
结构或联合的末尾可能有未命名的填充.
但是,如果任何两个成员之间的填充是可以接受的,那对我来说是不明确的.这是因为,通过说第二段,标准似乎暗示填充只能在结构或联合的末尾.例如,假设int占用4个字节,
#include <stdio.h>
struct s {
char c;
int a;
};
int main(void) {
printf("%d\n", sizeof(struct s));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以得出结论,在c和之间没有填充a吗?
不,你不能断定成员之间没有填充.
第一句话说,
... 结构对象中可能有未命名的填充,但不是在它的开头.
这表明成员中可以填充.实际上并不清楚最终会发生什么.因此,为了清楚起来,第二个引用说
结构或联合的末尾可能有未命名的填充.
这并不是说,成员之间不能有填充.这不是唯一的目的,它可能会,也可能不会存在,基于现有成员对齐.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |