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_longlongc_ushort,c_uint,c_ulong,c_ulonglongc_float,c_double,c_longdoublec_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