|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité de passage
![]() Étudiant Inscription : octobre 2012 Messages : 7 ![]() |
Bonjour , je suis en train de faire un programme de gestion de processus.Cependant j'ai un petit problème avec l'inclusion de variables globales situées dans un fichier .h .Pour y remédier j'ai essayé avec le mot clé "extern" mais le problème persiste . Pourriez-vous donc m'éclairer svp?
les erreurs en question: Code :
Code :
Code :
Code :
En vous remerciant d'avance. |
||||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 175 ![]() |
extern signifie en gros "déclaration non définissante".
Il faut quand même définir la variable quelque part. La variable doit être définie une et une seule fois (comme une fonction...) En général, il suffit de définir la variable dans un fichier .c (à part ou non) par exemple [CODE truc.h]extern int truc;[/CODE] [CODE truc.c]int truc;[/CODE]
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : octobre 2012 Messages : 7 ![]() |
D'accord , j'avais compris en grandes lignes le fonctionnement du extern , mais je croyais que dans le cas de l'utilisation de la variable dans plusieurs fichiers, on ne pouvait pas définir plusieurs fois celle-ci.
Je te remercie. |
|
|
00
|
|
|
#4 | ||||||||
|
Membre Expert
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 175 ![]() |
justement, on ne peut pas définir plusieurs fois la variable, mais on peut la déclarer plusieurs fois.
Dans cet exemple, getTruc et truc sont déclarés dans les trois unités de compilations (les trois .o), mais ne sont définis que dans un seul. Code truc.h :
Code truc.c :
Code machin.c :
Code main.c :
Dans ton code, les variables externes ne sont pas définies du tout, d'où les "undefined reference"
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
||||||||
|
00
|
|
|
#5 | |||
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 495 ![]() |
Citation:
1) chaque fichier est analysé au niveau sémantique. A ce niveau, le compilo a besoin de s'assurer que toutes les variables utilisées sont connues du programmeur. Mais comme une variable n'est définie qu'une fois, la solution a été de rajouter un mot clef indiquant au compilo "je connais cette variable mais je la définis ailleurs" => extern. Bien entendu il te faut avoir défini cette variable quelque part. Pour simplifier on la défini dans le source qui contient le main 2) édition de lien entre les sources pour créer l'exécutable => l'ensemble des références à la variable est reliée à la zone mémoire représentée par la variable, zone créée lors de la définition Accessoirement, on peut aussi utiliser extern pour bypasser une variable locale et référencer la globale. exemple Code c :
Personnellement je fracasserais la tronche d'un développeur qui me fait ça mais juste pour dire que c'est quand-même possible...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
10
|
|
|
#6 |
|
Invité de passage
![]() Étudiant Inscription : octobre 2012 Messages : 7 ![]() |
Je vous remercie.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com