在标准C中,下列哪一项是正确的?
(A) sizeof a结构等于:
sizeof ,它的最后一个成员。(我知道这不是真的。)_Alignof操作符获得),是最后一个成员。(这也不是真的,因为在某些情况下,sizeof类型可能大于其_Alignof值。见32位Windows GCC中的long double:sizeof是12,_Alignof是4)。
结构itself.的
通过相对地址,我指的是其最后一个成员的起始字节与其第一个成员的起始字节(或结构本身)之间的距离,这可以用offsetof宏获得,比如:offsetof(struct st, last_member)。
(B)结构的_Alignof值等于:
_Alignof值具有最大的 _Alignof值.备注:
我说的不是特定环境上的特定实现,而是一个“标准C (C18)"-compliant实现应该如何表现为
_Alignof是标准的C操作符,alignof是它在stdalign.h头中定义的宏同义词。发布于 2021-01-22 16:04:24
A的答案是“其他的东西”。
结构的大小必须至少是其上一个成员的偏移量加上该成员的大小加上足够的填充字节,使结构的大小成为其对齐要求的倍数(这等于其任何成员的最大对齐要求)。C实现可以在对齐要求的倍数中添加额外的填充字节,尽管我知道没有这样做。
B的答案是结构的对齐要求(其_Alignof值)等于其成员的最严格的对齐要求(其中最大的_Alignof值)。
特别要注意的是,C 2018 6.2.7 4写着“…”每个有效对齐值均为非负整数次方。“因此,如果任何对齐满足最严格的成员对齐要求,则它满足每个成员对齐要求,因此它就足够了。
https://stackoverflow.com/questions/65847914
复制相似问题