J'ai entendu dire que c'est une bonne pratique d'écrire des fonctions qui ne reçoivent rien en tant que paramètre comme ceci:
int func(void);
Mais j'entends que la bonne façon d'exprimer cela est comme ceci:
int func();
Quelle est la différence entre ces deux déclarations de fonction en C et C ++?
c++
programming-practices
c
Grisonnant
la source
la source
Réponses:
C et C ++ sont différents à cet égard.
Norme en ligne C 2011
En bref, une liste de paramètres vide dans une déclaration de fonction indique que la fonction prend un nombre non spécifié de paramètres, tandis qu'une liste de paramètres vide dans une définition de fonction indique que la fonction ne prend aucun paramètre.
En ce qui concerne C, vous ne devez jamais utiliser une liste d'identificateurs vide dans une déclaration ou une définition de fonction. Si une fonction n'est pas destinée à prendre des paramètres, spécifiez cela en utilisant
void
dans la liste des paramètres.Norme C ++ en ligne
Dans le cas de C ++, une liste de paramètres vide dans une déclaration ou une définition indique que la fonction ne prend aucun argument et équivaut à utiliser une liste de paramètres de
void
.la source
En C, une fonction avec une liste de paramètres vide
()
peut prendre n'importe quoi pour ses arguments. Littéralement n'importe quoi. Ceci est généralement utilisé pour implémenter une fonction qui peut prendre un nombre variable d'arguments , bien que ces jours-ci, il soit préférable d'utiliser la syntaxe d'ellipse plus explicite(...)
pour ces fonctions.En C, une fonction avec la liste des paramètres
(void)
prend explicitement rien pour ses arguments. Cela signifie que le compilateur peut vous dire que vous avez fait une erreur si vous essayez de passer quelque chose.En C ++, ces déclarations de fonctions sont équivalentes. Une liste de paramètres vide signifie "pas de paramètres" de la même manière
void
que.la source
()
pour celles de fonctions variadiques. Avez-vous un exemple de programme qui utilise cette convention?...
syntaxe et doit avoir au moins un paramètre nommé. La définition d'une telle fonction avec()
un comportement indéfini - et il n'y a aucun moyen pour le corps de la fonction d'utiliser les macros définies dans<stdarg.h>
pour lire les valeurs des paramètres. C'est le cas depuis la norme 1989/1990....
syntaxe pour éviter un comportement indéfini.