Ну нет, но ...
C99 указывает, что main()
вызывается в размещенной среде "при запуске программы", однако вам не нужно использовать поддержку времени выполнения C. Ваша операционная система выполняет файлы изображений и запускает программу по адресу, указанному компоновщиком.
Если вы хотите написать свою программу в соответствии с требованиями операционной системы, а не C99, вы можете сделать это без main (). Однако чем современнее (и сложнее) система, тем больше у вас проблем с библиотекой C, делающей предположения об использовании стандартного запуска во время выполнения.
Вот пример для Linux ...
$ cat > nomain.S
.text
_start:
call iamnotmain
movl $0xfc, %eax
xorl %ebx, %ebx
int $0x80
.globl _start
$ cat > demo.c
void iamnotmain(void) {
static char s[] = "hello, world\n";
write(1, s, sizeof s);
}
$ as -o nomain.o nomain.S
$ cc -c demo.c
$ ld -static nomain.o demo.o -lc
$ ./a.out
hello, world
Возможно, теперь это не «программа C99», а просто «программа Linux» с объектным модулем, написанным на C.