Ceci est à partir du Il semble utiliser
extern code> Les types de données définis dans d'autres espaces de noms seront juste être disponible? p> p>
5 Réponses :
Non, c'est un moyen explicite de dire CIN code> et
Cout code> sont déclarés sans les définir réellement. P>
Dans ce cas, vous extern code> signifie "Ces variables sont définies dans une autre unité de compilation (fichier .cpp ou .lib)" p>
#include
CIN code> et
cout code> sont déclarés comme
externe code>, le compilateur vous permettra de les utiliser sans se plaindre. Ensuite, lorsque la liaison est exécutée, il lève tous les variables
extern code> et trie tout le tout. P>
Cela signifie-t-il Istream code> ou
CIN code> est défini dans une autre unité dans le cas de
extern iStream Cin; code>?
Cela signifie Cin code> est. Ce n'est pas la même chose que la définition de la classe i>, laquelle dans ce cas est dans
iostream code>. La définition Classe i> doit toujours être disponible dans une unité de compilation pour utiliser des objets de ce type de classe '(c'est pourquoi les définitions de classe sont placées dans les fichiers en-tête i>).
CIN code> et
COUT code> sont des variables globales. En C ++, une variable globale doit être déclarée sur un seul et un seul fichier .CPP (à quelques exceptions près). Donc, si vous venez de dire
Istream Cin code>, la liaison se plaint lorsque vous allez lier deux fichiers qui déclarent tous deux la variable car il ne saurait pas savoir lequel utiliser. Donc, en déclarant tout sauf l'un d'entre eux comme
extern code>, vous dites à la liaison d'utiliser le non-
extern code> comme "réel", et le
extern code> ceux qui disent simplement "Cette variable est déclarée dans un autre fichier .CPP".
La distinction entre déclarer i> et définir i> est essentielle pour comprendre cela. S'il vous plaît, procurez-vous bien! Ils ne sont pas synonymes.
extern code> est utilisé pour désigner une variable définie dans une unité de compilation différente (pour l'instant, vous pouvez penser à une unité de compilation en tant que fichier .CPP). Les déclarations de votre exemple déclarent em> plutôt que définir em>
CIN code> et
cout code>. Il dit au compilateur que la définition de ces objets se trouve dans une autre unité de compilation (où elles sont
extern code>). P>
Mais je ne trouve nulle part où définir Cin code>, seul
istream code> est défini dans
CIN CODE> est un objet de type
Istream code>.
ISTREAM code> est la classe (dans ce cas, la classe de modèle).
CIN CODE> est une instance de la classe code> istream code>. La "définition" que je me réfère dans ma réponse est la définition de
CIN code>, pas
istream code>. Vous devez rechercher le sens de Définition i> vs. Déclaration i>. Les déclarations de vos exemples sont Déclarations i>.
La variable i> définition i> de la variable code> CIN code> est probablement dans une bibliothèque d'exécution. Vous ne le trouverez pas dans les fichiers d'en-tête de la bibliothèque standard.
@Stingraysc, y a-t-il un tour pour trouver où il est en fait défini?
@Symfony: Non. Il est défini dans le code qui a déjà été compilé dans une bibliothèque que vous associez votre code avec votre code. En général, une variable mentionnée par un externe code> peut être définie dans une unité de compilation B> mise à la disposition de la liaison (sous la forme d'un fichier d'objet compilé).
Le mot clé Variables déclarées par Extern Strong> Les déclarations n'auront aucun espace alloué, car elles doivent être correctement définies ailleurs. Si une variable est déclarée par exemple. extern fort> int i; p>
// Cela déclare qu'il existe une variable nommée I de type INT, définie quelque part dans le programme. p>
Certaines réponses disent ici que l'extérieur signifie que la variable est définie dans une autre unité de compilation. Ensuite, il ne faut pas compiler car aucune autre unité de compilation ou fichier n'est fourni au compilateur.
extern int a; int main(){ std::cout<<a<<std::endl; //Prints 3 } int a=3;