Considérons ces deux définitions de fonction
void foo(){}
void foo(void){}
Y a-t-il une différence entre les deux ? Si non, pourquoi l'argument du vide existe-t-il ? Des raisons esthétiques ?
Considérons ces deux définitions de fonction
void foo(){}
void foo(void){}
Y a-t-il une différence entre les deux ? Si non, pourquoi l'argument du vide existe-t-il ? Des raisons esthétiques ?
La raison principale est de parvenir à une interprétation cohérente des en-têtes qui sont partagés entre C et C++.
En C :void foo()
signifie "une fonction foo
en prenant un nombre non spécifié d'arguments de type non spécifié".void foo(void)
signifie "une fonction foo
ne pas accepter d'arguments"
En C++ :void foo()
signifie "une fonction foo
ne pas accepter d'arguments"void foo(void)
signifie "une fonction foo
ne pas accepter d'arguments"
En écrivant foo(void)
Par conséquent, nous obtenons la même interprétation dans les deux langues et rendons nos en-têtes multilingues (bien que nous devions généralement apporter d'autres modifications aux en-têtes pour qu'ils soient réellement multilingues, notamment en les enveloppant dans une balise extern "C"
si nous compilons du C++).
Je réalise que votre question concerne le C++, mais en ce qui concerne le C, la réponse se trouve dans K&R, pages 72-73 :
De plus, si une déclaration de fonction ne comprend pas d'arguments, comme dans
double atof();
cela aussi est considéré comme signifiant que rien ne doit être supposé au sujet des arguments de atof ; toute vérification des paramètres est désactivée. Cette signification spéciale de la liste d'arguments vide est destinée à permettre aux anciens programmes C de compiler avec les nouveaux compilateurs. Mais c'est une mauvaise idée de l'utiliser avec les nouveaux programmes. Si la fonction prend des arguments, déclarez-les. elle ne prend pas d'arguments, utilisez void.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.