La différence entre int main() et int main(void)
Les deux int main() et int main(void) peuvent sembler identiques à première vue mais il y a une différence significative entre les deux d’entre eux en C mais les deux sont les mêmes en C++.
En C, une fonction sans aucun paramètre peut prendre n’importe quel nombre d’arguments. Par exemple, une fonction déclarée comme ‘foo()’ peut prendre n’importe quel nombre d’arguments en C (appeler foo(), foo(1), foo(‘A’,1) ne donnera pas d’erreur).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
Le code ci-dessus s’exécute bien sans donner d’erreur car une fonction sans paramètre peut prendre n’importe quel nombre d’arguments mais ce n’est pas le cas en C++. En C++, nous aurons une erreur. Voyons.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
L’exécution du code ci-dessus nous donnera une erreur car nous ne pouvons passer aucun argument à la fonction ‘foo’.
Par contre, l’utilisation de foo(void) restreint la fonction à prendre n’importe quel argument et lancera une erreur. Voyons voir.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
Le code ci-dessus nous donnera une erreur car nous avons utilisé ‘foo(void)’ et cela signifie que nous ne pouvons pas passer d’argument à la fonction ‘foo’ comme nous le faisions dans le cas de ‘foo()’.
Donc, foo(void) et foo() sont toutes deux identiques en C++ mais pas en C. Il en est de même pour la fonction ‘main’ également. Ainsi, la forme préférée à utiliser est int main(void) si main ne prend aucun argument.
Différence entre int main() et void main() et main()
Comme toute autre fonction, main est aussi une fonction mais avec une caractéristique spéciale que l’exécution du programme commence toujours à partir de ‘main’. ‘int’ et ‘void’ sont ses types de retour. Donc, discutons les trois un par un.
- void main – La norme ANSI dit « non » au ‘void main’ et donc son utilisation peut être considérée comme mauvaise. On devrait arrêter d’utiliser le ‘void main’ si on le fait.
- int main – ‘int main’ signifie que notre fonction doit retourner un certain nombre d’entiers à la fin de l’exécution et nous le faisons en retournant 0 à la fin du programme. 0 est la norme pour « l’exécution réussie du programme ».
- main – En C89, le type de retour non spécifié est par défaut int. Donc, main est équivalent à int main en C89. Mais en C99, cela n’est pas autorisé et on doit donc utiliser int main.
Donc, on préfère int main.