extern struct 与 ABI 布局
匹配 C 结构体的内存布局
extern struct 与 ABI 布局 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Talking to C
When Zig calls into C code, both sides must agree on memory layout. That shared contract is the ABI.
Plain Structs Are Not Guaranteed
A regular struct lets Zig pick field order and padding freely, so its layout may not match what a C library expects.
Enter extern struct
Mark a type extern struct and Zig lays out its fields using the C ABI, matching a C struct field for field.
const Point = extern struct {
x: i32,
y: i32,
};Fields Stay in Order
An extern struct keeps your declaration order, just like C does, so the first field always comes first in memory.
Padding Like C
Unlike a packed struct, extern struct still adds padding for alignment, exactly the way a C compiler would.
Packed vs Extern
Use packed for bit-exact layout, and extern for matching C's byte layout. They solve different layout problems.
Pass Structs to C
An extern struct can be handed straight to a C function, because its layout matches the header the function was compiled against.
extern fn use_point(p: Point) void;Check the Size
Confirm an extern struct matches C with @sizeOf, which reports its total bytes including any alignment padding.
const n = @sizeOf(Point); // 8Inspect Field Offsets
Use @offsetOf to see exactly where each field starts, which is great for verifying a struct lines up with C.
const off = @offsetOf(Point, "y"); // 4Only C-Compatible Types
Fields in an extern struct must be C-compatible types, so Zig-only shapes like slices are not allowed inside one.
The Bridge to C
Together, extern struct and the C ABI let Zig and C share data safely with no copying or guessing about layout. 🔗
Quick Check
Recall what extern struct is designed to match.
Recap
You learned extern struct matches the C ABI: ordered fields with C-style padding, passable to C, verified with @sizeOf and @offsetOf. 🎉
常见问题解答
「extern struct 与 ABI 布局」课时是免费的吗?
是的 — 「extern struct 与 ABI 布局」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。
「extern struct 与 ABI 布局」这节课中我会学到什么?
匹配 C 结构体的内存布局 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Zig Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Zig Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「extern struct 与 ABI 布局」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Zig Academy 课中编写并运行代码吗?
能。每节 Zig Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 用于精确布局的 packed struct
- 像 u3 这样的任意宽度整数
- 位字段与标志
- extern struct 与 ABI 布局