2011-11-06 14 views
8

Ho visto il codice D che utilizza void main. È legale? Se sì, il reso non- void (int) è legale? Perché è permesso nella lingua?Utilizzo di `void main` in D

+0

Vedere anche http://stackoverflow.com/questions/3888661/how-can-d-return-0-on-success-and-non-zero-on-failure-if-main-is-void –

risposta

11

dalla funzione D Language Reference

main()

Per i programmi di console, main() funge da punto di ingresso. Viene chiamato dopo che tutti gli inizializzatori del modulo sono stati eseguiti e dopo che sono stati eseguiti tutti gli unittests. Dopo il suo ritorno, vengono eseguiti tutti i distruttori del modulo. main() devono essere dichiarate utilizzando una delle seguenti forme:

void main() { ... } 
void main(char[][] args) { ... } 
int main() { ... } 
int main(char[][] args) { ... } 

Così void main è legale.

Dagli stessi documenti, return statement parte:

Un ritorno esce dalla funzione corrente e forniture suo valore di ritorno. L'espressione è richiesta se la funzione specifica un tipo di reso che non è nullo. L'espressione viene convertita implicitamente nella funzione tipo restituito

Quindi sembra che restituire qualcosa da una funzione del vuoto non sia esplicitamente disabilitato (e in effetti farlo compila bene).

(perché si vuole fare questo però?)

+3

Addendum : quando 'void main' termina, D termina con 0. Quando' main' esce per eccezioni, il runtime termina con un codice di errore appropriato. Non è possibile restituire un valore da una funzione non void e si verificherà un errore in fase di runtime. – FeepingCreature

0

le seguenti versioni della funzione main() sono legali:

void main() { ... } 
void main(char[][] args) { ... } 
int main() { ... } 
int main(char[][] args) { ... } 

Le void main versioni sono le stesse delle int main versioni, se sempre restituisce 0 o lancia.

Problemi correlati