2010-09-30 15 views
5

Duplicar posible:
does c++ standard prohibit the void main() prototype?principal no puede ser nula

¿Por qué C++ no dejarme hacer void main()? No es un gran problema, pero aún tengo curiosidad.

+0

¿cuál es el problema con int void() {return 0;}; ? – Max

+1

Igual que [ ¿el estándar C++ prohíbe el prototipo void main()? ] (http://stackoverflow.com/questions/1915659/does-c-standard-prohibit-the-void-main-prototype). –

+2

mejor pregunta es por qué estás usando el derramamiento de sangre C++;) –

Respuesta

11

Debido tipo de retorno de main() (según lo dispuesto por la Norma) debe ser int

C++ 03 [Section 3.6.1 Función principal]

Una implementación no predefinir la función principal. Esta función no debe estar sobrecargada. Tendrá un tipo de devolución de tipo int, pero de lo contrario su tipo está definido por la implementación.

4

Porque la norma dice que devuelve int.

1

Algunos sistemas operativos esperan un valor de retorno integral de los procesos. Declare main para devolver un int. Si no se preocupan por el valor, devuelva 0.

Desde el FAQ comp.lang.c:

+3

Ni siquiera necesita devolver nada explícitamente. – GManNickG

+0

@GMan - buen punto. –

9

respuesta de BS mismo:

puedo escribir "void main()"? La definición

void main() { /* ... */ } 

no es y nunca ha sido C++, ni ha sido incluso C. Ver la ISO C++ estándar 3.6.1 [2] o el 5.1.2.2.1 estándar ISO C. Una implantación conforme acepta

int main() { /* ... */ } 

y

int main(int argc, char* argv[]) { /* ... */ } 

Una implantación conforme puede proporcionar más versiones de main(), pero todo lo que debe tener un tipo de retorno int. El int devuelto por main() es una forma de que un programa devuelva un valor a "el sistema" que lo invoca. En los sistemas que no proporcionan dicha instalación, se ignora el valor de retorno, pero eso no hace que "void main()" sea legal C++ o legal C. Incluso si su compilador acepta "void main()" evítelo, o arriesgue siendo considerados ignorantes por los programadores C y C++.

En C++, main() no necesita contener una declaración de devolución explícita. En ese caso, el valor devuelto es 0, lo que significa ejecución exitosa. Por ejemplo:

#include<iostream> 

int main() 
{ 
    std::cout << "This program returns the integer value 0\n"; 
} 

Tenga en cuenta también que ni ISO C++ ni C99 le permiten dejar el tipo de una declaración. Es decir, a diferencia de C89 y ARM C++, "int" no se supone que falta un tipo en una declaración.En consecuencia:

#include<iostream> 

main() { /* ... */ } 

es un error porque falta el tipo de retorno de main().

Fuente: http://www2.research.att.com/~bs/bs_faq2.html#void-main

Cuestiones relacionadas