下列哪项在标准 C 中是正确的?
(A) asizeof
结构等于:
其最后一个成员的相对地址加上
sizeof
其最后一个成员。(我知道这不可能是真的。)其最后一个成员的相对地址加上其最后一个成员的对齐值(由运算
_Alignof
符获得)。(这也不正确,因为在某些情况下a 类型可能大于其值。请参阅32 位 Windows GCC:是 12,是 4。)sizeof
_Alignof
long double
sizeof
_Alignof
其最后一个成员的相对地址加上结构本身的对齐值。(这也不可能是真的,正如前面的陈述中所解释的那样。)
其最后一个成员的相对地址加上最后一个成员的最大大小和结构本身的对齐值。
别的东西。
相对地址是指其最后一个成员的起始字节与其第一个成员(或结构本身)的起始字节之间的距离,可以使用如下offsetof
宏获得:offsetof(struct st, last_member)
.
(B)结构的_Alignof
值等于:
_Alignof
其最大成员的 值_Alignof
。别的东西。
笔记:
我不是在谈论特定环境中的特定实现,而是在理论上,符合“标准 C (C18)”的实现应该如何表现。
_Alignof
是标准的 C 运算符,是在header 中alignof
定义的宏同义词。stdalign.h