La main
función 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 nombres sin nombre).
El nombre main
no está reservado en C ++, excepto como una función en el espacio de nombres global. Usted es libre de declarar otras entidades nombradas main
, incluidas, entre otras cosas, clases, variables, enumeraciones, funciones miembro y funciones no miembros que no están en el espacio de nombres global.
Puede declarar una función nombrada main
como una función miembro o en un espacio de nombres, pero dicha función no sería la main
función que designa el inicio del programa.
La main
función no se puede declarar como static
o inline
. Tampoco se puede sobrecargar; solo puede haber una función nombrada main
en el espacio de nombres global.
los main
función no se puede usar en su programa: no se le permite llamar a la main
función desde ninguna parte de su código, ni se le permite tomar su dirección.
El tipo de retorno de main
debe serint
. No se permite ningún otro tipo de retorno (esta regla está en negrita porque es muy común ver programas incorrectos que declaran main
con un tipo de retorno devoid
; esta es probablemente la regla más frecuentemente violada con respecto a la main
función).
Hay dos declaraciones 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 denominan convencionalmente argc
y argv
, respectivamente. argv
es un puntero a una matriz de cadenas C que representan los argumentos del programa. argc
es el número de argumentos en la argv
matriz.
Por lo general, argv[0]
contiene el nombre del programa, pero este no es siempre el caso. argv[argc]
se garantiza que es un puntero nulo.
Tenga en cuenta que dado que un argumento de tipo matriz (como char*[]
) es realmente solo un argumento de tipo puntero disfrazado, las dos siguientes son 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; tendría que consultar la documentación de su implementación para ver qué admite.
main()
se espera que devuelva cero para indicar éxito y no cero para indicar falla. No es necesario que escriba explícitamente una return
declaración en main()
: si deja main()
regresar sin una return
declaración explícita , es lo mismo que si hubiera escrito return 0;
. Las siguientes dos main()
funciones tienen el mismo comportamiento:
int main() { }
int main() { return 0; }
Hay dos macros, EXIT_SUCCESS
y EXIT_FAILURE
, definidas en <cstdlib>
eso, también se pueden devolver main()
para indicar el éxito y el fracaso, respectivamente.
El valor devuelto por main()
se pasa a la exit()
función, que finaliza el programa.
Tenga en cuenta que todo esto se aplica solo cuando se compila para un entorno alojado (informalmente, un entorno donde 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 totalmente definidos por la implementación y main()
es posible que ni siquiera se requiera una función. Sin embargo, si está escribiendo C ++ para un SO de escritorio moderno, está compilando para un entorno alojado.
main
regresar en C y C ++ .