Зиг "перевод с" не переводит основную функцию

Я создал файл 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 означать "без параметров".

Вот почему второй пример сработал - потому что список параметров не был пустым.

Другие вопросы по тегам