Zig "translate c" 不翻译 main 函数
Zig "translate c" doesn't translate main function
我创建了一个 C 文件:
int main() {
return 1;
}
我使用 Zig 的 translate-c
命令行选项生成一个 zig 文件,但我只得到一些全局变量声明,如
pub const __GCC_ATOMIC_TEST_AND_SET_TRUEVAL = 1;
pub const __FLT16_MAX_EXP__ = 15;
pub const __BIGGEST_ALIGNMENT__ = 16;
pub const __SIZEOF_FLOAT__ = 4;
pub const __INT64_FMTd__ = c"ld";
pub const __STDC_VERSION__ = c_long(201112);
... // and many
并且没有找到 main
函数。但是如果我像这样将函数名称更改为 myFunction
:
int myFunction(int a) {
return a;
}
重新生成后出现一个函数:
pub export fn myFunction(a: c_int) c_int {
return a;
}
我错过了什么吗? zig的translate-c
函数的规则是什么?
问这个问题的时候,translate-c还不支持未指定参数的函数。这是通过使用 --verbose-cimport
:
可见的
test.c:1:5: warning: unsupported type: 'FunctionNoProto'
test.c:1:5: warning: unable to resolve prototype of function 'main'
在C中,如果你把参数留空,它实际上不是零参数,它是未指定的。您必须使用 void
来表示 "no parameters"。
所以这就是第二个示例起作用的原因 - 因为参数列表不为空。
但是从 e280dce3 开始,Zig 支持翻译带有未指定参数的 C 函数,问题中的示例变成了这个 Zig 代码:
pub export fn main() c_int {
return 1;
}
我创建了一个 C 文件:
int main() {
return 1;
}
我使用 Zig 的 translate-c
命令行选项生成一个 zig 文件,但我只得到一些全局变量声明,如
pub const __GCC_ATOMIC_TEST_AND_SET_TRUEVAL = 1;
pub const __FLT16_MAX_EXP__ = 15;
pub const __BIGGEST_ALIGNMENT__ = 16;
pub const __SIZEOF_FLOAT__ = 4;
pub const __INT64_FMTd__ = c"ld";
pub const __STDC_VERSION__ = c_long(201112);
... // and many
并且没有找到 main
函数。但是如果我像这样将函数名称更改为 myFunction
:
int myFunction(int a) {
return a;
}
重新生成后出现一个函数:
pub export fn myFunction(a: c_int) c_int {
return a;
}
我错过了什么吗? zig的translate-c
函数的规则是什么?
问这个问题的时候,translate-c还不支持未指定参数的函数。这是通过使用 --verbose-cimport
:
test.c:1:5: warning: unsupported type: 'FunctionNoProto'
test.c:1:5: warning: unable to resolve prototype of function 'main'
在C中,如果你把参数留空,它实际上不是零参数,它是未指定的。您必须使用 void
来表示 "no parameters"。
所以这就是第二个示例起作用的原因 - 因为参数列表不为空。
但是从 e280dce3 开始,Zig 支持翻译带有未指定参数的 C 函数,问题中的示例变成了这个 Zig 代码:
pub export fn main() c_int {
return 1;
}