quelle est la différence entre la déclaration de la fonction et de signature?
En C ou C++ quelle est la différence entre la déclaration de la fonction et de signature de fonction?
Je sais quelque chose de la déclaration de la fonction, mais la fonction de signature est totalement nouveau pour moi. Quel est l'intérêt de la notion de fonction de signature? Quels sont les deux concepts utilisés pour réellement?
Merci!
- Officiellement, il n'y a pas une telle chose comme la fonction "signature" en C. En C il n'y a pas besoin de la notion de "signature de fonction". Votre question est purement C++. Il est totalement dénuée de sens en C.
Vous devez vous connecter pour publier un commentaire.
Une déclaration de fonction est le prototype d'une fonction (ou il peut venir de la définition de la fonction si aucun prototype n'a été vu par le compilateur à ce point) - il comprend le type de retour, le nom de la fonction et le type des paramètres (option C).
Une fonction de signature est les parties de la déclaration de la fonction, le compilateur utilise pour effectuer la résolution de surcharge. Depuis plusieurs fonctions peuvent avoir le même nom (c'est à dire., ils sont surchargés), le compilateur a besoin d'un moyen de déterminer qui de plusieurs fonctions possibles avec un nom particulier d'un appel de fonction doit résoudre. La signature est ce que le compilateur considère que la résolution de surcharge. Plus précisément, la norme définit la "signature" comme:
Noter que le type de retour ne fait pas partie de la signature de la fonction. Comme le standard dit dans une note de bas de page, "les signatures de la Fonction n'incluent pas le type de retour, parce que ce n'est pas de participer à la résolution de surcharge".
void foo();
est une déclaration de fonction qui ne présentent pas un prototype en C. en Fait, cette question n'est pas censé être étiqueté C, car il n'y a pas de notion de fonction "signature" dans C. C'est purement une C++ question et, pour cette raison, la réponse devrait pas mentionner les "prototypes".La norme définit deux conditions: la déclaration et la définition. Une définition est une tentative de déclaration. Cependant, la C99 et C++03, des normes ont légèrement différentes définitions.
À partir de C++0x projet:
La signature de la fonction n'incluent pas le type de retour ou de couplage type de la fonction.
OK, Wikipédia n'est pas d'accord avec moi sur le type de retour inclus. Je sais cependant que le type de retour n'est pas utilisée par le compilateur au moment de décider si un appel de fonction correspond à la signature. Ce précédent StackOverflow question semble d'accord: Est le type de retour de la partie de la signature de la fonction?
static
etextern
sont les classes de stockage que peut s'appliquent aux fonctions en C et C++.Veuillez également noter que le niveau de const et volatile sur l'argument ne font pas partie de la signature, conformément à la norme. Mais certains compilateurs de se tromper.
par exemple
a la même signature que
Une déclaration de fonction est un prototype. Une signature de fonction indique quel est le type de retour et les paramètres utilisés qui fait la signature. Considérez ceci:
Maintenant, considérons ce scénario: un programmeur est demandé ce qui est de la signature de la fonction pour
foo
:int
int
, nomméa
etb
respectivementLe prototype de fonction sur l'autre main est d'indice dans le compilateur C/C++, sur ce à quoi s'attendre et si la signature ne correspond pas avec le prototype, le compilateur émet une erreur, ainsi que le contexte de la "déclaration de la fonction d'erreur" ou "prototype mismatch'.
int f();
en est un exemple.