C 语言集成 (C)

Zig 旨在与 C 语言进行无缝集成。它可以编译 C 代码,链接 C 库,甚至可以直接导入 C 头文件。

导入 C 头文件

使用 @cImport 内置函数可以直接在 Zig 中使用 C 库,而无需手动编写绑定。

const c = @cImport({
    @cDefine("_NO_CRT_STDIO_INLINE", "1");
    @cInclude("stdio.h");
});

pub fn main() void {
    _ = c.printf("Hello from C printf!\n");
}

C 类型原语

Zig 提供了一组与 C ABI 兼容的类型:

  • c_char, c_short, c_int, c_long, c_longlong
  • c_ushort, c_uint, c_ulong, c_ulonglong
  • c_float, c_double, c_longdouble
  • c_void

导出 C 库

Zig 可以轻松地将代码编译为 C 兼容的库(静态库 .a 或动态库 .so / .dll)。只需将函数标记为 export 并使用 C 兼容的类型。

export fn add(a: i32, b: i32) i32 {
    return a + b;
}

混合编译

zig build 系统原生支持混合编译 C 和 Zig 源文件。

exe.addCSourceFile(.{ .file = b.path("src/foo.c"), .flags = &.{} });

translate-c

Zig 包含一个 translate-c 工具,可以将 C 代码转换为 Zig 代码。这对于理解 Zig 如何映射 C 结构或手动转换代码非常有用。

$ zig translate-c main.c