Hay varias firmas posibles para main()
:
void main()
void main(string[] args)
void main(char[][] args)
void main(wstring[] args)
void main(wchar[][] args)
void main(dstring[] args)
void main(dchar[][] args)
int main()
int main(string[] args)
int main(char[][] args)
int main(wstring[] args)
int main(wchar[][] args)
int main(dstring[] args)
int main(dchar[][] args)
Si int es el tipo de retorno, entonces es más o menos lo mismo en C o C++. El valor que devuelve es lo que ve el OS/shell. Si se lanza una excepción, se imprime un seguimiento de pila, y el sistema operativo/shell ve un valor distinto de cero. No sé de qué se trata Puede variar según el tipo de excepción.
Si void es el tipo de devolución, el sistema operativo/shell ve 0. Si se produce una excepción, se imprime un seguimiento de pila y el sistema operativo ve un valor distinto de cero. De nuevo, no sé de qué se trata.
Básicamente, tener void principal no le permite preocuparse por devolver un valor al sistema operativo/shell. Muchos programas no se preocupan en lo más mínimo por devolver el éxito o el fracaso al SO/shell. Entonces, con el vacío, el OS/shell siempre obtiene 0 a menos que se produzca una excepción, lo cual tiene sentido, ya que la única falla del programa en ese punto es si se escapa una excepción main()
. Si do se preocupan por devolver el éxito o el fracaso al OS/shell, simplemente use una de las versiones que devuelve int.
La plétora de firmas debido a diferentes tipos de cadenas es que puede utilizar prácticamente cualquiera de los posibles tipos de cadenas como la entrada a main()
. main()
y main(string[] args)
son probablemente los más utilizados.
@Michal He aceptado su respuesta porque es la más clara. Pero creo que si ves main con void, en el mejor de los casos es confuso si alguien dice que devuelve algo. No es la mejor opción de parte D en mi opinión. –
Es un poco engañoso, pero no más que algo como "' main' devuelve un valor para el sistema operativo ". Que es lo que indica la documentación para la mayoría de los idiomas :) en casi todos los términos :) Siempre hay una capa intermedia para 1) manejar las interacciones específicas del sistema operativo y 2) aplicar la semántica del lenguaje. – shambulator
@shambulator pero el valor devuelto por main (en C++) es el valor devuelto al sistema, así que para mí como para "un usuario de un idioma" no importa realmente qué otras capas estarán allí - estoy afirmando claramente que desde el último punto que tengo el control sobre (principal) mi programa devuelve los principales retornos y teniendo el vacío como un tipo de devolución y aún devolver algo "implícitamente" es simplemente una mala idea. Para mí de todos modos. Y cuando dices que no es cierto que el principal valor de retorno para el sistema operativo no es cierto porque un principal es el primer punto (o el último) depende de cómo veas esto - –