traduccion example entry definicion c++ standards main entry-point

c++ - example - ¿Qué fue incorrecto con el vacío principal()?



main c++ definicion (4)

C ++ nunca ha permitido void main() , aunque algunos compiladores pueden permitirlo como una extensión o simplemente porque no lo diagnostican.

De manera similar, C nunca ha permitido void main() excepto como una extensión; el mismo estándar de 1989 que introdujo la palabra clave void definió las dos definiciones estándar para main : int main(void) e int main(int argc, char *argv[]) .

Otras lenguas lo permiten porque, bueno, son otras lenguas.

No hay ninguna ventaja particular en poder escribir void main() lugar de int main() . Ni siquiera necesita devolver explícitamente un valor; Caer del final de main es equivalente a return 0; (en C ++, y en C a partir de C99).

¿Por qué el ajuste del tipo de retorno del punto de entrada a void en C ++ siempre ha sido desalentado y luego fue eliminado por la norma y está prohibido por los compiladores modernos? ¿Por qué se considera una mala práctica?

Ahora, como entiendo, C # y Java permiten que el tipo de retorno del punto de entrada sea void es decir

static void main(String[] args) /* Java */ static void Main(string[] args) /* C# */

Y los programadores de C # y Java no lo consideran una mala práctica, de hecho lo usan con frecuencia.

Otros lenguajes que son (solo se pretende que lo sean, dudo que C ++ tenga éxito en esta década, al menos) posibles sucesores de C ++ como el lenguaje de programación D o Vala también permiten un void main() . Como puede ver, dudo que la comunidad de C ++ lo haya eliminado del estándar porque era demasiado oscuro o impopular.

Entonces, mi pregunta es: ¿Por qué la comunidad de C ++ eliminó void main() ? ¿Qué estaba mal con eso?


El comité de estándares de C ++ probablemente optó por requerir int main() debido a la gran cantidad de código existente que se espera que use una declaración de devolución para devolver un código de salida específico al sistema de tiempo de ejecución. No sería razonable esperar que todo el código existente cambie para usar exit() lugar, por lo que int main() se convirtió en un requisito en la norma.

Un lenguaje como Java, cuando se diseñó, no tenía ningún cuerpo de código existente con el que debía ser compatible. Por lo tanto, los diseñadores podrían elegir void main() y requerir el uso de System.exit() para códigos de salida distintos de cero.

Por lo tanto, lo que estaría "mal" con elegir void main() para el estándar C ++ sería que rompería el código existente que se esperaba que usara return y un valor de código de salida de main() .


Está mal porque esto no es lo que el estándar de C ++ especifica como main legal. A nadie le importa lo que especifican los otros idiomas. Para los programas de C ++, solo el estándar de C ++ es relevante, y dice int .


Generalmente quieres saber el estado de salida de tu programa. Esa es la razón por la que tiene el int main() : devuelve el estado de salida.