La mainfunció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 mainno 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 maincomo una función miembro o en un espacio de nombres, pero dicha función no sería la mainfunción que designa el inicio del programa.
La mainfunción no se puede declarar como statico inline. Tampoco se puede sobrecargar; solo puede haber una función nombrada mainen el espacio de nombres global.
los main función no se puede usar en su programa: no se le permite llamar a la mainfunción desde ninguna parte de su código, ni se le permite tomar su dirección.
El tipo de retorno de maindebe 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 maincon un tipo de retorno devoid ; esta es probablemente la regla más frecuentemente violada con respecto a la mainfunción).
Hay dos declaraciones mainque 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 argcy argv, respectivamente. argves un puntero a una matriz de cadenas C que representan los argumentos del programa. argces el número de argumentos en la argvmatriz.
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 returndeclaración en main(): si deja main()regresar sin una returndeclaració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_SUCCESSy 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.
mainregresar en C y C ++ .