una todas tipos llamar las funciones funcion ejemplos como codigo clases c++ main c++-faq

c++ - todas - tipos de funciones en c



¿Cuál es la declaración correcta de main? (5)

¿Cuál es la firma correcta de la función main en C ++? ¿Cuál es el tipo de devolución correcto y qué significa devolver un valor desde main ? ¿Cuáles son los tipos de parámetros permitidos y cuáles son sus significados?

Es este sistema específico? ¿Han cambiado esas reglas con el tiempo? ¿Qué pasa si los violo?


De los documentos estándar., 3.6.1.2 Función principal ,

Tendrá un tipo de retorno de tipo int, pero de lo contrario su tipo está definido por la implementación. Todas las implementaciones permitirán ambas de las siguientes definiciones de main:

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

En la última forma, argc será el número de argumentos pasados ​​al programa desde el entorno en el que se ejecuta el programa. Si argc es distinto de cero, estos argumentos se suministrarán en argv [0] a través de argv [argc-1] como punteros al caracteres iniciales de cadenas multibyte terminadas en nulo .....

Espero que ayude..


La función main debe declararse como una función no miembro en el espacio de nombres global. Esto significa que no puede ser una función miembro estática o no estática de una clase, ni puede colocarse en un espacio de nombres (incluso el espacio de nombre sin nombre).

El nombre main no está reservado en C ++, excepto como una función en el espacio de nombres global. Puede declarar otras entidades denominadas main , incluidas, entre otras cosas, clases, variables, enumeraciones, funciones miembro y funciones no miembro no incluidas en el espacio de nombres global.

Puede declarar una función llamada main como una función miembro o en un espacio de nombres, pero dicha función no sería la función main que designa dónde se inicia el programa.

La función main no se puede declarar como static o en inline . Tampoco puede ser sobrecargado; solo puede haber una función llamada main en el espacio de nombres global.

La función main no se puede utilizar en su programa: no se le permite llamar a la función main desde ningún lugar de su código, ni se le permite tomar su dirección.

El tipo de retorno de main debe ser int . No se permite ningún otro tipo de devolución (esta regla está en negrita porque es muy común ver programas incorrectos que declaran main con un tipo de void de retorno, esta es probablemente la norma más frecuentemente violada con respecto a la función main ).

Hay dos declaraciones de main que deben permitirse:

int main() // (1) int main(int, char*[]) // (2)

En (1) , no hay parámetros.

En (2) , hay dos parámetros y se llaman convencionalmente argc y argv , respectivamente. argv es un puntero a una matriz de cadenas en C que representan los argumentos del programa. argc es la cantidad de argumentos en la matriz argv .

Usualmente, argv[0] contiene el nombre del programa, pero este no es siempre el caso. argv[argc] garantiza que es un puntero nulo.

Tenga en cuenta que dado que un argumento de tipo de matriz (como char*[] ) es realmente solo un argumento de tipo de puntero en el disfraz, las dos siguientes son ambas formas válidas de escribir (2) y ambas significan exactamente lo mismo:

int main(int argc, char* argv[]) int main(int argc, char** argv)

Algunas implementaciones pueden permitir otros tipos y números de parámetros; Debería verificar la documentación de su implementación para ver qué es lo que admite.

main() se espera que devuelva cero para indicar éxito y no cero para indicar falla. No es necesario que escriba explícitamente una declaración de return en main() : si deja que main() regrese sin una declaración de return explícita, es lo mismo que si hubiera escrito return 0; . Las siguientes dos funciones main() tienen el mismo comportamiento:

int main() { } int main() { return 0; }

Hay dos macros, EXIT_SUCCESS y EXIT_FAILURE , definidas en <cstdlib> que también se pueden devolver desde main() para indicar el éxito y el fracaso, respectivamente.

El valor devuelto por main() pasa a la función exit() , que finaliza el programa.

Tenga en cuenta que todo esto se aplica solo al compilar para un entorno alojado (informalmente, un entorno en el que tiene una biblioteca estándar completa y hay un sistema operativo que ejecuta su programa). También es posible compilar un programa C ++ para un entorno independiente (por ejemplo, algunos tipos de sistemas integrados), en cuyo caso el inicio y la terminación están completamente definidos en la implementación y una función main() puede que ni siquiera sea necesaria. Sin embargo, si está escribiendo C ++ para un sistema operativo de escritorio moderno, está compilando para un entorno alojado.


La redacción exacta del último estándar publicado (C ++ 14) es:

Una implementación permitirá tanto

  • una función de () devolver int y

  • una función de (int , puntero a puntero a char) devuelve int

como el tipo de main .

Esto deja en claro que se permiten deletreos alternativos siempre que el tipo de main sea ​​del tipo int() o int(int, char**) . Por lo tanto, también se permiten los siguientes:

  • int main(void)
  • auto main() -> int
  • int main ( )
  • signed int main()
  • typedef char **a; typedef int b, e; e main(bd, ac)

Las dos líneas principales válidas son int main() e int main(int, char*[]) . Cualquier otra cosa puede compilar o no. Si main no devuelve explícitamente un valor, 0 se devuelve implícitamente.


Detalles sobre los valores de retorno y su significado

Según 3.6.1 ( [basic.start.main] ):

Una instrucción de retorno en main tiene el efecto de dejar la función main (destruir cualquier objeto con duración de almacenamiento automático) y llamar a std::exit con el valor de retorno como argumento. Si el control llega al final de main sin encontrar una instrucción return , el efecto es el de ejecutar

return 0;

El comportamiento de std::exit se detalla en la sección 18.5 ( [support.start.term] ), y describe el código de estado:

Finalmente, el control se devuelve al entorno de host. Si el estado es cero o EXIT_SUCCESS , se EXIT_SUCCESS una forma definida por la implementación del estado de finalización exitosa. Si el estado es EXIT_FAILURE , se EXIT_FAILURE una forma definida por la implementación de la terminación de estado fallido. De lo contrario, el estado devuelto está definido por la implementación.