Bonjour à tous,
ce sujet n'est pas un réel problème mais juste une question de compréhension concernant le mot clé extern.
L'idée que j'ai du rôle de ce mot est simple : permet au compilateur de savoir que telle variable (ou fonction) va être utilisé dans mon fichier source, mais que sa définition se trouve ailleurs ... Vrai ?
Bien, alors j'ai osé à faire ceci :
Fichier1.c
Fichier2.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #include <stdio.h> void uneFonction(); extern int i = 50; int main() { ... return 0; }
J'envoi ensuite la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include <stdio.h> extern int i; void uneFonction() { ... }
g++ -Wall -pedantic Fichier1.c Fichier2.c
Et là à mon grand étonnement la compilation fonctionne. J'ai effectivement un message d'avertissement comme quoi i est initialisé et déclaré en extern, mais la compilation va jusqu'au bout ... Pour moi ceci aurait dû planter ... Est-ce que quelqu'un peut m'expliquer pourquoi ça fontionne ? Est-ce que parce que le compilo ne trouve aucun i extern, il prend la valeur définie dans fichier1 ?
Deuxième question rapide, j'ai fait des recherches sur le net avant de venir et je suis tombé sur ça :
Utilisez extern "c" pour empêcher que les noms de fonction soient substantypés dans des programmes C++.
Je ne comprends pas ce que ça veut dire, pourriez-vous m'éclairer ?
Merci de votre lecture et de votre aide
Partager