déclaration extern et de définition de la fonction à la fois dans le même fichier
Je viens de la navigation à travers gcc
fichiers sources. Dans gcc.c
, j'ai trouvé quelque chose comme
extern int main (int, char **);
int
main (int argc, char **argv)
{
Maintenant, mon doute est extern
est-à-dire au compilateur que la fonction n'est pas dans ce fichier, mais qui va se trouver ailleurs dans le projet. Mais ici, la définition de main
est, immédiatement après le extern
déclaration. Ce but est le extern
déclaration de servir alors?
Il semble que, dans cet exemple précis, extern
semble se comporter comme export
que nous utilisons dans l'assemblée, wherin nous exportation d'un symbole particulier à l'extérieur du module
Des idées?
OriginalL'auteur Pavan Manjunath | 2012-04-13
Vous devez vous connecter pour publier un commentaire.
Vous êtes l'incompréhension la
extern
- il ne pas dire au compilateur que cette définition est en un autre fichier, il déclare simplement qu'il existe sans la définir. Il est parfaitement d'accord pour qu'il soit défini dans le même fichier.C est le concept de déclaration (déclarant que quelque chose existe, sans la définir) et la définition (en fait de l'amener dans l'existence). Vous pouvez déclarer quelque chose d'aussi souvent que vous le voulez, mais ne pouvez définir qu'une seule fois.
Parce que les fonctions ont une liaison externe par défaut, le
extern
mot-clé n'est pas pertinent dans ce cas.OriginalL'auteur paxdiablo
Fonctions sont implicitement extern en C. y Compris
extern
est juste un rappel visuel. Note de côté, de faire une fonction non extern vous pouvez utiliser lestatic
mot-clé.OriginalL'auteur cnicutar
Dans une déclaration de fonction,
extern
simplement déclare que la fonction a une liaison externe, qui est la valeur par défaut; leextern
mot-clé est totalement inutile, dans ce contexte, et l'effet est identique à une déclaration normale/prototype sansextern
mot-clé.OriginalL'auteur R..
Les avertissements probablement proposé un prototype de fonction avait disparu. C'est tout.
OriginalL'auteur justin
La définition de la
main
fonction:est déjà une déclaration est le prototype de la syntaxe de la fonction
main
avec une liaison externe. Cela signifie qu'un prototype déclaration avecextern
juste avant lamain
définition est redondant.OriginalL'auteur ouah