【发布时间】:2019-12-04 00:16:11
【问题描述】:
给定一个打包(即假设没有对齐)结构:
struct Foo {
int x;
int y;
};
struct Foo *foo;
将&foo->y 转换为foo + sizeof(int) 是否“安全”(即在标准中的某处定义)(即foo->y 的地址等于foo 的地址加上int 的大小) ?
我正在关注C11 standard6.2.6 Representations of types,但它没有说明字段如何存储在结构中。
【问题讨论】:
-
这非常接近offsetof implementation。为什么不使用偏移量?
(uintptr_t)(void*)foo + offsetof(struct Foo, y)? -
谢谢,但我不能,因为我正在为
C实现一个玩具编译器。所以我想知道结构的数据布局是否在某处定义。 -
难道不是由您的编译器来确定(缺少)填充吗?我认为这符合标准,但我不能引用任何内容。
标签: c struct compiler-construction