2011-03-03 4 views
2

Pour autant que je sache, en C++ on peut déclarer plusieurs fois le même nom, dans la mesure où il a le même type dans toutes ces déclarations. Pour déclarer un objet de type int, mais PAS le définir, le mot-clé extern est utilisé. Donc, ce qui suit devrait être correct et compiler sans erreurs:Déclarations multiples C++ dans une portée locale

extern int x; 
extern int x; // OK, still declares the same object with the same type. 
int x = 5; // Definition (with initialization) and declaration in the same 
       // time, because every definition is also a declaration. 

Mais une fois que je me suis déplacé ce à l'intérieur d'une fonction, le compilateur (GCC 4.3.4) se plaint que je suis redéclarant x et qu'il est illégal. Le message d'erreur est le suivant:

test.cc:9: error: declaration of 'int x' 
test.cc:8: error: conflicts with previous declaration 'int x' 

int x = 5; est dans la ligne 9 et extern int x est en ligne 8.

Ma question est:
Si plusieurs déclarations ne sont pas censés être des erreurs, puis POURQUOI est-ce une erreur dans ce cas particulier?

Répondre

7

Une déclaration extern déclare avoir quelque chose à lien externe (ce qui signifie la définition devrait apparaître à la portée du fichier dans une unité de compilation, peut-être l'actuel). Les variables locales ne peuvent pas avoir de lien externe, donc le compilateur se plaint que vous essayez de faire quelque chose de contradictoire.

+0

Que vous, maintenant je comprends. Il n'y a donc aucun moyen de simplement déclarer un objet dans la fonction sans le définir en même temps? – SasQ

+0

@SasQ: Oui, je crois que c'est vrai. –

Questions connexes