2011-11-06 14 views
8

He visto el código D que usa void main. Es esto legal? En caso afirmativo, ¿la devolución no es void (int) también es legal? ¿Por qué esto está permitido en el idioma?Usando `void main` en D

+0

Véase también http://stackoverflow.com/questions/3888661/how-can-d-return-0-on-success-and-non-zero-on-failure-if-main-is-void –

Respuesta

11

de la función D Language Reference

principal()

Para programas de la consola, main() sirve como punto de entrada. Se llama después de que se ejecutan todos los inicializadores del módulo y después de que se ejecutan las pruebas de unidad. Después de que vuelve, se ejecutan todos los destructores del módulo. main() debe declararse usando uno de los siguientes formas:

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

Así void main es legal.

De los mismos documentos, return statement parte:

Un regreso sale de la función actual y suministra su valor de retorno. Se requiere expresión si la función especifica un tipo de devolución que no es nulo. La expresión se convierte implícitamente en la función return type

Parece que devolver algo de una función void no está explícitamente desautorizado (y de hecho lo hace compila bien).

(¿Por qué quieres hacer eso aunque?)

+3

Adición : cuando 'void main' finaliza, D sale con 0. Cuando' main' sale por excepción, el tiempo de ejecución finaliza con un código de error apropiado. No se permite devolver un valor de una función no nula y se producirá un error en el tiempo de ejecución. – FeepingCreature

0

Las siguientes versiones de la función main() son legales:

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

Los void main versiones son las mismas que las versiones int main, si siempre devuelve 0 o tira.