Selon Wikipedia: P>
http://fr.wikipedia.org/wiki/external_variable P>
Une variable externe peut également être déclarée à l'intérieur d'une fonction. P> blockQuote>
Quel est le but d'une variable externe déclarée dans une fonction? Devrait-il être aussi statique? P>
5 Réponses :
La déclaration externe passe à l'intérieur d'une fonction. Cela signifie simplement qu'aucune autre fonction ne peut voir la variable. dans un autre fichier source: p> Il est simplement un moyen de "isoler" une variable, de sorte que ça ne " t accidentellement utilisé dans des endroits où il n'est pas censé être utilisé. p> p>
Je n'obtiens pas comment cela est différent d'une variable locale régulière ... Comment extern code> le rend différent?
@ 0x499602D2 extern code> Indique au compilateur 'Cette variable est définie ailleurs.' Cela ne définit rien, cela ne fait que déclarer.
@ 0x499602D2: Il ne définit pas une variable; Il déclare i> un qui existe ailleurs. Ce n'est donc pas "local" du tout.
C'est une variable gloobale définie dans un autre fichier source. Faire FOO ++; code> sur une variable locale non définie serait un comportement indéfini et une inutile. Les deux en font une mauvaise idée.
@ 0x499602D2: J'ai ajouté quelques autres extraits de code pour expliquer mieux (je pense ...)
Je voudrais donc initialiser ma variable à dire, la valeur 10 ailleurs, mais il ne serait peut-être pas utilisé dans Func ()?
@ user997112: Oui, et bien sûr n'importe où ailleurs, vous mettez une déclaration externe, ainsi que n'importe quel endroit qui a réellement foo code> dans le fichier source [lieux après sa définition, car les compilateurs ne peuvent pas "voir" en avant lors de la découverte de quelle variable est].
Il permet de restreindre l'accès à une portée globale à une portée:
La seule différence entre déclarer une variable externe à la portée de l'espace de noms: et la déclarant à la fonction de fonction: p> #include <string>
void foo() {
using std::string;
string str1;
}
string str2; // Error - `using` not performed at this scope
Le texte fait référence à une déclaration non définissant em> d'une fonction variable externe intérieure. Extern Les définitions em> les fonctions intérieures sont illégales. P>
Donc, une déclaration non définie d'une fonction variable externe à l'intérieur signifie simplement que vous souhaitez utiliser cette variable à l'intérieur de cette fonction. La variable elle-même doit être une variable globale définie ailleurs. P>
Fondamentalement, si vous n'avez pas besoin d'accéder à cette variable globale (définie ailleurs) dans l'ensemble de la traduction et en avez-vous besoin de la nécessité à l'intérieur de cette fonction, il est parfaitement bonne idée de le déclarer localement. De cette façon, vous ne polluez pas l'espace de noms global avec des identifiants sans autre fonction. P>
S'il ne peut être utilisé nulle part ailleurs - pourrait-il être avancé qu'il pourrait aussi être une variable statique locale? Y a-t-il une différence?
@ user997112: Je ne sais pas ce que vous entendez par "il ne peut être utilisé nulle part ailleurs". En fait, la variable elle-même peut i> être utilisée absolument n'importe où. (C'est une variable globale, après tout.) C'est juste qu'il nécessitera également une déclaration séparée dans d'autres endroits.
Dans la réponse ci-dessus, il semble que la variable ne peut pas être utilisée en dehors de la fonction, elle est déclarée externe dans?
@ user997112: Il existe une confusion entre les notions d'identifiant "variable" et "identifiant faisant référence à une variable". La variable i> est définie i> ailleurs. C'est global. Tout le monde peut déclarer i> cette variable et y accéder ainsi. Toutes les personnes. Donc, c'est juste une question de savoir comment vous le déclarez. En la déclarant localement, vous avez accès à cette variable localement. Toute autre localité peut également le déclarer localement et avoir accès à la même variable i> localement.
@ user997112: C'est comme Internet. Il n'y a qu'un seul internet global. Tout le monde peut y accéder en s'inscrivant avec ISP. Mais quand une personne s'inscrit avec le fournisseur de services Internet, cela ne signifie pas que cette personne permet à chacun d'utiliser sa connexion. Seule la personne qui s'est inscrite peut utiliser la connexion. Pendant ce temps, d'autres personnes peuvent également s'inscrire avec leurs propres fournisseurs de services Internet et avoir accès au même Internet.
Et c'est la manière dont une variable globale fonctionne: il n'y a qu'une seule variable globale, disons, int A; code> défini dans un fichier quelque part. Tout le monde peut "établir une connexion" à cette variable globale en le déclarant comme
extern int a; code>. Maintenant, cette connexion peut être établie localement, à l'intérieur d'une fonction, de sorte que seule cette fonction a accès à la connexion. Mais cela n'empêche aucune autre fonction d'établir sa propre connexion locale en faisant son propre
extern int a; code> Déclaration. Toutes ces fonctions accéderont à la même variable globale
A code>.
Le mot clé code> extern code> dit qu'un identifiant a une liaison externe. Cela signifie qu'il est lié au même nom ailleurs, il est déclaré avec une liaison externe. C'est-à-dire que les différentes instances du nom dans différents endroits font référence au même objet. P>
Déclaration d'un identifiant à l'intérieur d'un bloc (y compris le bloc qui définit une fonction) donne une portée bloquée. La portée de cette instance de l'identifiant se termine à la fin du bloc. P>
combinaison externe code> avec la portée du bloc permet à une fonction de voir un identifiant externe sans encombrer l'espace d'autres fonctions. (Néanmoins, c'est souvent une mauvaise pratique.) P>
Ces messages sont liés: Stackoverflow.com/questions/16459422/... et Stackoverflow.com / Questions / 9686198 / ...