0Pricing
Zig Academy · 课时

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); // 8

Inspect 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"); // 4

Only 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 用于精确布局的 packed struct
  2. 像 u3 这样的任意宽度整数
  3. 位字段与标志
  4. extern struct 与 ABI 布局
← 返回 Zig Academy