La mainfonction doit être déclarée en tant que fonction non membre dans l'espace de noms global. Cela signifie qu'il ne peut pas être une fonction membre statique ou non statique d'une classe, ni ne peut être placé dans un espace de noms (même l'espace de noms sans nom).
Le nom mainn'est pas réservé en C ++ sauf en tant que fonction dans l'espace de noms global. Vous êtes libre de déclarer d'autres entités nommées main, y compris entre autres, des classes, des variables, des énumérations, des fonctions membres et des fonctions non membres qui ne sont pas dans l'espace de noms global.
Vous pouvez déclarer une fonction nommée en maintant que fonction membre ou dans un espace de noms, mais une telle fonction ne serait pas la mainfonction qui désigne le début du programme.
La mainfonction ne peut pas être déclarée comme staticou inline. Il ne peut pas non plus être surchargé; il ne peut y avoir qu'une seule fonction nommée maindans l'espace de noms global.
La mainfonction ne peut pas être utilisée dans votre programme: vous n'êtes pas autorisé à appeler la mainfonction de n'importe où dans votre code, ni à prendre son adresse.
Le type de retour de maindoit êtreint . Aucun autre type de retour n'est autorisé (cette règle est en gras car il est très courant de voir des programmes incorrects qui se déclarent mainavec un type de retour de void; c'est probablement la règle la plus fréquemment violée concernant la mainfonction).
Deux déclarations maindoivent être autorisées:
int main() // (1)
int main(int, char*[]) // (2)
Dans (1) , il n'y a pas de paramètres.
Dans (2) , il y a deux paramètres et ils sont respectivement nommés argcet argv. argvest un pointeur vers un tableau de chaînes C représentant les arguments du programme. argcest le nombre d'arguments dans le argvtableau.
Habituellement, argv[0]contient le nom du programme, mais ce n'est pas toujours le cas. argv[argc]est garanti comme étant un pointeur nul.
Notez que comme un argument de type tableau (comme char*[]) n'est en réalité qu'un argument de type pointeur déguisé, les deux suivants sont tous deux des moyens valides d'écrire (2) et ils signifient tous deux exactement la même chose:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Certaines implémentations peuvent autoriser d'autres types et nombres de paramètres; vous devrez vérifier la documentation de votre implémentation pour voir ce qu'elle prend en charge.
main()est censé renvoyer zéro pour indiquer le succès et différent de zéro pour indiquer un échec. Vous n'êtes pas obligé d'écrire explicitement une returninstruction dans main(): si vous laissez main()return sans returninstruction explicite , c'est la même chose que si vous aviez écrit return 0;. Les deux main()fonctions suivantes ont le même comportement:
int main() { }
int main() { return 0; }
Il existe deux macros, EXIT_SUCCESSet EXIT_FAILURE, définies dans <cstdlib>qui peuvent également être renvoyées main()pour indiquer respectivement le succès et l'échec.
La valeur renvoyée par main()est transmise à la exit()fonction, qui met fin au programme.
Notez que tout cela ne s'applique que lors de la compilation pour un environnement hébergé (de manière informelle, un environnement dans lequel vous avez une bibliothèque standard complète et un système d'exploitation exécutant votre programme). Il est également possible de compiler un programme C ++ pour un environnement autonome (par exemple, certains types de systèmes embarqués), auquel cas le démarrage et l'arrêt sont entièrement définis par l'implémentation et une main()fonction peut même ne pas être requise. Si vous écrivez du C ++ pour un système d'exploitation de bureau moderne, vous compilez pour un environnement hébergé.
mainretourner en C et C ++ .