Редактировать: Билли опередил меня с ответом, но вот еще немного фона
Более конкретно, main обычно больше зависит от стандартной библиотеки. То, что вызывает main
, это не C, а стандартная библиотека. ОС загружает приложение, передает управление в точку входа библиотеки (_start
в GCC), и в конечном итоге библиотека вызывает main
. Вот почему точка входа для приложения Windows может быть WinMain
, а не обычной. Встроенное программирование может иметь то же самое. Если у вас нет стандартной библиотеки, вам нужно написать точку входа, которую обычно предоставляет библиотека (помимо прочего), и вы можете назвать ее как угодно.
В наборе инструментов GCC вы также можете заменить точку входа библиотеки своей собственной, используя опцию -e
. (В этом отношении вы также можете полностью удалить библиотеку.)
Сделай свой собственный:
int main(int argc, char *argv[])
{
#if defined(BUILD_UNIT_TESTS)
return main_unittest(argc, argv);
#endif
#if defined(BUILD_RUNTIME)
return main_run(argc, argv);
#endif
}
Если вам не нравится ifdef
, напишите два основных модуля, которые содержат только основной. Соедините одно для модульных тестов, а другое - для обычного использования.