valores una todas tipos retornan que llamar lenguaje las funciones funcion ejemplos como c++ c main

una - ¿Por qué el tipo de función principal en C y C++ se deja al usuario para definir?



tipos de funciones en lenguaje c (6)

Esta pregunta ya tiene una respuesta aquí:

¿Por qué main () es una función definida por el usuario?

¿Cuándo usaré void main() e int main() ?


El tipo de retorno para main está determinado por la implementación, no por el programador. Verifique la documentación de su compilador para ver cuáles son las firmas legales main . No asuma que void main() es uno de ellos. En un entorno alojado, main normalmente devuelve int . En un entorno freestandaing, el punto de entrada puede que ni siquiera se llame main , pero su tipo de devolución seguirá determinado por la implementación, no por el programador.


Muchos compiladores no son compatibles con void main (), por lo tanto, siempre debe usar int main ().


Originalmente en el lenguaje C no había ningún tipo de vacío y, por lo tanto, la función tenía que devolver int.

En la práctica, return int le permite ejecutar otro proceso desde su proceso (usando fork y exec) y si puede obtener el resultado de retorno de ese proceso sabrá si funcionó o no.


Hay 3 situaciones:

  1. implementación independiente
  2. conformando la implementación alojada sin extensiones
  3. implementación alojada con extensiones

En 1. no es necesario que haya una función llamada main en absoluto. La implementación define cómo se inicia un programa.

En 2. un programa comienza a ejecutarse en una función llamada main , definida con una de las siguientes 2 ''firmas'': int main(void) o int main(int argc, char **argv)

En 3. un programa comienza a ejecutarse en una función llamada main , definida como permitida por la implementación. Esta función debe devolver int para cumplir con los estándares. Por ejemplo: int main(int argc, char **argv, char **envp) o int main(wchar_t**) . Tenga en cuenta que los programas que usan estos formularios no son necesariamente válidos en todas las implementaciones alojadas (y pueden ser inválidas para el autor original si la implementación cambia).


EDITAR Esta respuesta no es tan completa como podría ser, ya que no aborda realmente la frase extraña "o de alguna manera definida por la implementación. He escrito una respuesta más completa que también aborda C90, C11 y C ++. FIN DE EDITAR

Esto es lo que dice el estándar C (ISO C 9899: 1999):

5.1.2.1 Entorno independiente

En un entorno independiente (en el que la ejecución del programa C puede tener lugar sin ningún beneficio de un sistema operativo), el nombre y el tipo de la función llamada al inicio del programa están definidos por la implementación. / .. / El efecto de la terminación del programa en un entorno independiente está definido por la implementación.

5.1.2.2 Entorno hospedado

No es necesario proporcionar un entorno alojado, pero debe cumplir con las siguientes especificaciones, si están presentes.

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 todos los nombres, ya que son locales a la función en la que se declaran):

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

El texto en el estándar C ++ es más o menos idéntico. Tenga en cuenta que el "inicio del programa" en el texto es una subcláusula del entorno alojado.

Esto significa:

  • Si su programa se ejecuta en un entorno hostless (su programa es un sistema integrado o un sistema operativo), puede tener cualquier tipo de devolución. void main () es lo más común.

  • Si su programa se ejecuta en un entorno alojado (en la parte superior de un sistema operativo), main () debe devolver int, y puede tener parámetros adicionales.


Lundin tiene razón acerca de C, pero en C ++ la redacción es lo suficientemente distinta como para marcar la diferencia:

[C++11: 3.6.1/1]: un programa debe contener una función global llamada main , que es el inicio designado del programa. Está definido por la implementación si se requiere un programa en un entorno independiente para definir una función main .

[C++11: 3.6.1/2]: una implementación no debe predefinir la función main . Esta función no debe estar sobrecargada. Tendrá un tipo de retorno de tipo int , pero de lo contrario su tipo está definido por la implementación [..]

El primer pasaje en negrita no anula ni cancela el segundo.

main retornos int en C ++, siempre.