Ho appreso dal mio collega che uno può scrivere ed eseguire un programma C senza scrivere una funzione main()
. Si può fare come inQual è l'uso di _start() in C?
withoutMain.c
// Compile it with gcc -nostartfiles
void _start() {
int ret = my_main();
exit(ret);
}
int my_main() {
puts("This is a program without main!\n");
return 0;
}
compilarlo come: gcc -o withoutMain withoutMain.c –nostartfiles
Esegui come: ./ withoutMain
La mia domanda è quando uno avrebbe bisogno di fare questo genere di cose? Qualche scenario del mondo reale?
correlato in remoto: http://stackoverflow.com/questions/2548486/compiling-without-libc –
Articolo classico che dimostra alcuni dei meccanismi interni di avvio dei programmi: [Un tutorial Whirlwind sulla creazione di file eseguibili ELF really Teensy per Linux] (http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html). Questa è una buona lettura che discute alcuni dei punti migliori di '_start()' e altre cose al di fuori di 'main()'. –
Il linguaggio C di per sé non dice nulla su '_start', o su qualsiasi punto di ingresso diverso da' main' (tranne che il nome del punto di ingresso è definito dall'implementazione per le implementazioni indipendenti (incorporate)). –