2011-09-27 6 views
3

C ne prend pas en charge la surcharge de fonctions. Comment pouvons-nous alors avoir 3 prototypes pour principal? Quelle est la raison historique pour avoir 3 prototypes?Pourquoi avons-nous plusieurs déclarations pour main en C?

+0

La réponse à votre question peut être trouvée ici: http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left -to-the-user-to-define/5296593 # 5296593 – Lundin

Répondre

9

Il existe seulement deux prototypes pour main qu'une implémentation C conforme à la norme est requise pour reconnaître: int main(void) et int main(int, char *[]). Cela ne surcharge pas, car il ne peut y avoir qu'un seul main par programme; avoir un void foo(int, double) dans un programme et un char *foo(FILE *) dans un autre ne surcharge pas non plus.

La raison d'être des deux prototypes est la commodité: certaines applications veulent des arguments de ligne de commande, tandis que d'autres ne s'en soucient pas.

Tous les autres prototypes, tels que void main(void) et int main(int, char *[], char *[]), sont des extensions dépendant du compilateur/plateforme.

+0

Il n'y a que deux formes _canonical_ de 'main' et la seconde a aussi le texte" ou équivalent "(donc' char ** 'est correct). En outre, la norme autorise aussi explicitement les autres - elle ne les mandate pas. – paxdiablo

+0

@paxdiablo: J'ai décidé de ne pas déranger avec des formes équivalentes car elles sont déjà traitées par d'autres règles de la norme. Merci pour l'autre remarque, ajouté "requis" à la réponse. –

+0

Cela répond seulement comment cela fonctionne sur un système hébergé. Pour une réponse complète, consultez ce lien: http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the- utilisateur-à-définir/5296593 # 5296593 – Lundin