sirve que para entre diferencia dev definicion c++ standards

c++ - que - Diferencia entre void main e int main?



void main(){ (8)

Esta pregunta ya tiene una respuesta aquí:

¿Importa de qué manera declaro mis programas en C ++?


Deberías usar int main . Los estándares C y C ++ especifican que main debe devolver un valor.


El punto es que los programas C (y C ++ son los mismos) siempre (¿deberían?) Devolver un valor correcto o un código de error, por lo que deberían declararse de esa manera.


En C ++, main() debe devolver int . Sin embargo, C99 permite que main() tenga un tipo de retorno no int . Aquí está el extracto del estándar C99.

5.1.2.2.1 Inicio del programa

La función llamada al inicio del programa se llama main. La implementación no declara ningún prototipo para esta función. Se definirá con un tipo de retorno de int y sin parámetros:

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

o con dos parámetros (a los que se hace referencia aquí como argc y argv, aunque se pueden usar los nombres, ya que son locales para la función en la que se declaran):

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

o equivalente; o de alguna otra manera definida por la implementación .

También tenga en cuenta que gcc compila void main() aunque prácticamente, return 0; al encontrar un corsé de cierre.


Hace mucho tiempo encontré esta página (void main (void)) que contenía muchas razones fuera del argumento "el estándar dice que no es válido". En arquitecturas / sistemas operativos particulares, podría hacer que la pila se corrompiera y otras cosas desagradables sucedan.


Para C ++, solo int está permitido. Para C, C99 dice que solo int está permitido. El estándar anterior permitía un retorno void .

En resumen, siempre int .


Si vas por la especificación, siempre deberías declarar que main devuelve un int .

En realidad, sin embargo, la mayoría de los compiladores le permitirán salirse con la suya con cualquiera de los dos, así que la verdadera diferencia es si desea / necesita devolver un valor al shell.


Bjarne Stroustrup dejó esto bastante claro:

La definición void main() no es ni nunca ha sido C ++, ni siquiera ha sido C.

Ver reference .


La diferencia es que uno es la forma correcta de definir main y el otro no.

Y sí, importa.

int main(int argc, char** argv)

o

int main()

es la definición correcta de tu main según las especificaciones de C ++.

void main(int argc, char** argv)

no es y era, IIRC, una perversidad que vino con el compilador de C ++ de Microsoft.

https://isocpp.org/wiki/faq/newbie#main-returns-int