non dindon.
En compilant, les compilateurs fait la liste de tout les noms de fonctions& et leursadresses respectives, et ce pour chaque fichier cpp.
En linkant, le linker assembler les fichiers compiler et va faire la correspondance nomdefonction/variable avec leurs adresses respectives.
avec ta methode Tech, chaque fichier a une variable de meme nom. Mais quand il s´agira de creer cette variable dans un espace mémoire, il y aura 1 nom de variable pour plusieurs adresses, d´ou le PB : le compilateur ne sait pas laquelle utiliser.
si tu utilise le nom clef " extern", tu informes le compilateur que la variable est déja créée ( donc tu aura forcement cette variable sans le ´extern´ dans un fichier) et par conséquent le compilateur allouera uniquement une variable, puis fera reference a cette adresse.
Par ailleur, supposons que tu as plusieurs fichiers cpp qui utilisent des variables globales de meme nom, mais d´utilités différentes, dans ce cas, on peut utiliser le mot clef " static" devant chacune des variables pour informer le compilateur que cette variable n´est globale que dans le fichier et pas dans l´ensemble du projet.
en résumé :
- variable globale = variable allouée avec une portée sur tout le projet.
- variable globale " static" = variable allouée avec une portée sur le fichier compilé uniquement
- variable globale " extern" = la variable est déjà allouée ailleur. Utiliser l´adresse de celle-ci.
et c´est exactement pareil pour les fonctions.
et speciale dédicace pour dindon : Si le compilo dit que l´erreur se situe dans le fichier obj, c´est parcequ´il a trouvé une référence a cette variable dans ce fichier et dans un autre et le pb se retrouve au linkage. Le fichier compile tres bien tout seul !