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
risposta
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ò?)
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
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.
- 1. Differenza tra void main e int main?
- 2. Java - public static void main()
- 3. Differenza tra main (void) e main() in C
- 4. Differenza tra int main() e int main (void)?
- 5. C++ void return type of main()
- 6. Cosa significa "public static void main args"?
- 7. Equivalente di Python di "public static void main"
- 8. Utilizzo del tipo Java Void in Kotlin
- 9. Utilizzo di Require.js senza data main
- 10. Utilizzo di puntatori void su piattaforme diverse
- 11. Utilizzo della digitazione dinamica in D, un linguaggio tipizzato staticamente
- 12. in D
- 13. In POSIX, un main (void) può recuperare gli argomenti della riga di comando?
- 14. Spiegazione di 'String args []' e statiche in 'Main (string [] args) public static void'
- 15. C "% d" di formato
- 16. Utilizzo di std :: unique_ptr <void> con un deleter personalizzato come smart void *
- 17. Estensione di AsyncTask <Void, Void, Void>
- 18. Uso di costruttori con matrici in D
- 19. Cosa significa "void * (*) (void *)" in C++?
- 20. costruttore java "void" e "non void"
- 21. Programmazione CGI in D
- 22. non può convertire '* void (MyClass :: *) (void *) in void * (*) (void *) nella funzione pthread_create
- 23. Converti in membro di dati a void *
- 24. dove dichiarare le strutture, dentro main() o outside main()?
- 25. Come visualizzare i numeri di riga in D backtrace?
- 26. In java -D cosa significa la D?
- 27. Cosa è (\ d +)/(\ d +) in regex?
- 28. Metodi multipli main() in java
- 29. C Dereference void * pointer
- 30. Qual è la differenza tra (void *) e (void (*) (tipo di argomento)) cast?
Vedere anche http://stackoverflow.com/questions/3888661/how-can-d-return-0-on-success-and-non-zero-on-failure-if-main-is-void –