Зиг "перевод с" не переводит основную функцию
Я создал файл C:
int main() {
return 1;
}
Я использовал Зиг 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;
}
Я что-то пропустил? Какое правило зигов translate-c
функционировать?
1 ответ
Решение
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
означать "без параметров".
Вот почему второй пример сработал - потому что список параметров не был пустым.