Algunos compiladores de C++ permiten que la función principal tenga un tipo de retorno void
. Pero, ¿el sistema operativo no requiere int
tipo de valor devuelto para especificar si el programa terminó bien o no?C++ tipo de retorno nulo de main()
Respuesta
C++ hace no permite que main
tenga un tipo de devolución void
. El estándar C++ publicado requiere que sea int
. Algunos compiladores de C++ le permiten usar void
, pero eso no es recomendable. En general, al sistema operativo no le importa una cosa u otra. Un sistema operativo específico puede requerir que un programa proporcione un valor de retorno, pero no necesariamente tiene que venir del valor de retorno main
. Si el compilador de C++ permite void
, entonces probablemente proporcione algún otro medio para especificar el código de salida del programa.
El estándar de C++ no permite que main() tenga un tipo de vacío devuelto. La mayoría de los compiladores lo dejarán pasar por razones históricas, sin embargo.
main
al devolver void
se acepta por compatibilidad con versiones anteriores, pero no es legal.
En este caso, el código de salida será 0. Todavía puede cambiar el código de salida, utilizando la función de salida.
C++ permite que la función principal de tener el tipo de retorno void
No, no lo hace.
El estándar C++ solo requiere 2 tipos diferentes de firmas principales. Otros se pueden agregar opcionalmente si el tipo de devolución es int
.
Las implementaciones de C++ que permiten tipos de retorno nulos son incorrectas en términos del estándar de C++.
C++ estándar de 03 S. 3.6.1-2:
Una implementación no predefinir la función principal. Esta función no debe estar sobrecargada. Deberá tener un tipo de retorno de tipo int, pero de lo contrario su tipo está definido por la implementación. Todas las implementaciones permitirán tanto de las siguientes definiciones de principal:
int main() { /* ... */ } int main(int argc, char* argv[]) {/* ... */ }
Si desea portable C++ código o escribir buenos C ejemplos ++, entonces siempre se debe usar uno de los 2 variaciones anteriores.
Es por eso que void main() no está permitido por C++ estándar, aunque algunos compiladores (por ejemplo, gcc) sí lo permiten.
Para hacerlo corto: siempre use int main(), never void main().
gcc lo permite para C pero lo prohíbe para C++, incluso si dices que es -permisivo. – BatchyX
En los idiomas en los que un void
return from main es legal (no C++), el sistema operativo generalmente ve un valor de retorno de 0
en la terminación normal (no excepcional) del programa.
But doesn't OS require int type value returned to specify whether program
ended well or not?
¿Por qué lo haría siempre?En Windows, al hacer doble clic en el ícono, el proceso muere una vez que termina. El sistema operativo no verifica el tipo de devolución allí. Incluso en Linux si solo ejecuta el binario como ./runBinary, simplemente se ejecuta y sale. El sistema operativo no muestra mensaje en sí mismo que falla o tiene éxito.
Todas las respuestas anteriores son correctas, la norma dice que es int, pero algunos compiladores también permiten el vacío.
Dependiendo del compilador, puede utilizar una función principal vacía, pero la forma correcta (que debe seguir un compilador que cumpla con la norma) es devolver int con 0 como una buena salida & limpia y cualquier otra cosa que indique que su programa ha hecho algo mal.
- 1. C#, tipo de retorno dinámico
- 2. ¿Devuelve "nulo" en la función de tipo de retorno primitivo?
- 3. Tipo de literal nulo en C#
- 4. C++ sobrecarga de tipo de retorno hackear
- 5. C# forma de escribir Func con retorno nulo
- 6. nula Retorno de método NSInteger tipo de retorno
- 7. Scala Tipo de retorno
- 8. EasyMock andReturn() valor de retorno nulo
- 9. Definición de main() en C
- 10. Los delegados de multidifusión deben tener un tipo de nulo de retorno. ¿Por qué?
- 11. El tipo de retorno vacío
- 12. Tipo de retorno covariante en Java
- 13. Función con arreglo tipo de retorno en C
- 14. Polimorfismo del tipo de retorno en las lenguas C-like
- 15. -C Objetivo Bloque tipo como valor de retorno
- 16. C# interface specfying un retorno de tipo genérico
- 17. ¿Se permite el tipo de retorno booleano en C?
- 18. Tipo de valor de C# inicializado con nulo
- 19. ¿Tiene nulo el tipo de objeto?
- 20. Por qué el tipo de retorno de asincrónico debe ser nulo, Tarea o Tarea <T>
- 21. Java Tipo extraño retorno genérica
- 22. tipo de retorno de una función dinámica
- 23. Tipo de retorno de Java métodos genéricos
- 24. main() en C, C++, Java, C#
- 25. Búsqueda de tipo de letra del parámetro de retorno
- 26. Tratar de entender cómo funciona un tipo de retorno puntero
- 27. ¿el estándar C++ prohíbe el prototipo void main()?
- 28. ¿Por qué el valor de retorno predeterminado de main es 0 y no EXIT_SUCCESS?
- 29. Tipo de retorno en la expresión Si
- 30. Efecto del tipo de retorno siendo estático
¿Dónde aprendiste esto? C++ requiere 'main' para tener un tipo de retorno de' int'. –
Esta es la enésima vez que publico este enlace donde N es un número entero muy grande. http://www2.research.att.com/~bs/bs_faq2.html#void-main Pero nunca ayuda :-( – dirkgently
@dirkgently: "Pero nunca ayuda" ... Espero que ayude al menos N gente :). –