2010-09-06 19 views
11

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()

+18

¿Dónde aprendiste esto? C++ requiere 'main' para tener un tipo de retorno de' int'. –

+6

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

+4

@dirkgently: "Pero nunca ayuda" ... Espero que ayude al menos N gente :). –

Respuesta

26

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.

4

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.

5

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.

19

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.

1

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().

+0

gcc lo permite para C pero lo prohíbe para C++, incluso si dices que es -permisivo. – BatchyX

3

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.

0
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.

0

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.