Undefined reference: C
Résolu/Fermé
Wazza56
Messages postés
379
Date d'inscription
dimanche 23 septembre 2007
Statut
Membre
Dernière intervention
31 mars 2014
-
Modifié par Wazza56 le 24/03/2010 à 14:54
Wazza56 Messages postés 379 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 31 mars 2014 - 31 mars 2010 à 17:18
Wazza56 Messages postés 379 Date d'inscription dimanche 23 septembre 2007 Statut Membre Dernière intervention 31 mars 2014 - 31 mars 2010 à 17:18
A voir également:
- Undefined reference: C
- Reference pto - Accueil - Box & Connexion Internet
- Impossible d'accéder à l'élément référencé par ce raccourci ✓ - Forum Windows
- Le compte reference est actuellement verrouillé ✓ - Forum Windows
- Undefined mail - Forum Gmail
- La référence n'est pas valide excel - Forum Excel
6 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
25 mars 2010 à 22:47
25 mars 2010 à 22:47
Tu n'as pas très bien compris. Mais ça va venir ;-))).
Cela se passe en deux temps.
Tu déclares ta variable dans un fichier source (.c) normalement mais en dehors de tout bloc.
Ensuite, tu déclares ta variable en extern dans un fichier header (.h). C'est ce fichier-là qu'il faudra inclure dans tous les fichiers où tu souhaites utiliser ta variable.
Exemple :
toto.c
int a=5;
-----
toto.h
extern a;
---
fichier.c
#include "toto.h"
/*tu peux dorénavant utiliser la variable a*/
Mais, je me répète, tu n'as pas besoin d'utiliser extern si tu n'as qu'un seul fichier. Et tu n'as même pas besoin d'utiliser des variables globales dans ton cas, il te suffit de les passer en paramètre. En règle générale, il vaut mieux éviter l'utilisation de variables globales.
Cela se passe en deux temps.
Tu déclares ta variable dans un fichier source (.c) normalement mais en dehors de tout bloc.
Ensuite, tu déclares ta variable en extern dans un fichier header (.h). C'est ce fichier-là qu'il faudra inclure dans tous les fichiers où tu souhaites utiliser ta variable.
Exemple :
toto.c
int a=5;
-----
toto.h
extern a;
---
fichier.c
#include "toto.h"
/*tu peux dorénavant utiliser la variable a*/
Mais, je me répète, tu n'as pas besoin d'utiliser extern si tu n'as qu'un seul fichier. Et tu n'as même pas besoin d'utiliser des variables globales dans ton cas, il te suffit de les passer en paramètre. En règle générale, il vaut mieux éviter l'utilisation de variables globales.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
24 mars 2010 à 15:28
24 mars 2010 à 15:28
Salut.
Si tu n'as que ce fichier là, c'est normal.
tu déclares tes variables mais tu ne les définis pas. C'est comme avec les fonctions, il faut qu'elles soit définis une unique fois, mais déclarer autant qu'on veux.
le extern annonce que tu as une vairable (ou une fonction) mais que celle-ci est définie ailleurs.
Pour moi, le souci viens du fait que extern est obligatoire pour les variables mais pas pour les fonctions.
Si tu n'as que ce fichier là, c'est normal.
tu déclares tes variables mais tu ne les définis pas. C'est comme avec les fonctions, il faut qu'elles soit définis une unique fois, mais déclarer autant qu'on veux.
le extern annonce que tu as une vairable (ou une fonction) mais que celle-ci est définie ailleurs.
Pour moi, le souci viens du fait que extern est obligatoire pour les variables mais pas pour les fonctions.
Wazza56
Messages postés
379
Date d'inscription
dimanche 23 septembre 2007
Statut
Membre
Dernière intervention
31 mars 2014
27
24 mars 2010 à 22:14
24 mars 2010 à 22:14
Soit j'ai pas tout compris, soit j'ai compris de travers...
Tu veux dire que mon externe fait référence à une variable contenue dans un autre fichier que je doit mettre en #include c'est ça?
Si c'est ça je ne sais pas comment faire ^^
Sinon, comment puis-je déclarer une variable globale autrement?
Merci pour ta réponse!
Tu veux dire que mon externe fait référence à une variable contenue dans un autre fichier que je doit mettre en #include c'est ça?
Si c'est ça je ne sais pas comment faire ^^
Sinon, comment puis-je déclarer une variable globale autrement?
Merci pour ta réponse!
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
25 mars 2010 à 08:09
25 mars 2010 à 08:09
bon, tu n'as pas tout compris.
Il faut que tu mettes ta variable globale dans un autre fichier, mais pas un include (les include n'ont en fait rien de mystérieux, ce sont de simples copier coller).
En général, on met :
Il faut que tu mettes ta variable globale dans un autre fichier, mais pas un include (les include n'ont en fait rien de mystérieux, ce sont de simples copier coller).
En général, on met :
extern TYPE variable;dans un fichier .h que l'on inclura partout où l'on veux utiliser la variable. Et on met
TYPE variable=VAL;dans un fichier .c qu'on liera avec le programme. Note le "=VAL" n'est pas obligatoire, mais c'est mieux.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
25 mars 2010 à 08:34
25 mars 2010 à 08:34
Je rajouterai que si tu ne précises pas à la définition de la variable sa valeur (TYPE variable = VAL) alors la variable sera initialisée à 0.
De plus, les variables globales sont à éviter autant que possible.
Tu peux tout simplement faire passer les variables en paramètre et les déclarer dans une fonction.
Ensuite, si tu n'utilises pas ces variables dans d'autre fichier, tu n'as pas besoin de passer par extern. Tu peux tout simplement enlever le extern. Ainsi tu n'auras pas besoin de passer par un fichier .h.
Cdlt,
De plus, les variables globales sont à éviter autant que possible.
Tu peux tout simplement faire passer les variables en paramètre et les déclarer dans une fonction.
Ensuite, si tu n'utilises pas ces variables dans d'autre fichier, tu n'as pas besoin de passer par extern. Tu peux tout simplement enlever le extern. Ainsi tu n'auras pas besoin de passer par un fichier .h.
Cdlt,
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
25 mars 2010 à 11:48
25 mars 2010 à 11:48
Je rajouterai que si tu ne précises pas à la définition de la variable sa valeur (TYPE variable = VAL) alors la variable sera initialisée à 0.
J'aimerai un peu plus de précision là dessus. C'est ce que dit la théorie, mais j'ai remarqué (au moins en C++, ce qui peut expliquer le problème) que ce n'était pas toujours le cas, que des fois la variable prenait une valeur indéterminée.
J'aimerai un peu plus de précision là dessus. C'est ce que dit la théorie, mais j'ai remarqué (au moins en C++, ce qui peut expliquer le problème) que ce n'était pas toujours le cas, que des fois la variable prenait une valeur indéterminée.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
>
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
25 mars 2010 à 14:17
25 mars 2010 à 14:17
Cela dépend de la variable. Sil s'agit dune variable statique ou globale elle sera initialisée a 0 ou son équivalent. Pour les variables sans persistance et locale, elles ne seront pas initialisées.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
25 mars 2010 à 14:22
25 mars 2010 à 14:22
Super merci, j'aurai au moins appris un truc aujourd'hui !
Wazza56
Messages postés
379
Date d'inscription
dimanche 23 septembre 2007
Statut
Membre
Dernière intervention
31 mars 2014
27
25 mars 2010 à 17:35
25 mars 2010 à 17:35
Je pencherais plus sur le fait qu'il prend une valeur indéterminé en fonction de son enregistrement en mémoire mais c'est toujours bon à savoir quand on se trompe ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Wazza56
Messages postés
379
Date d'inscription
dimanche 23 septembre 2007
Statut
Membre
Dernière intervention
31 mars 2014
27
25 mars 2010 à 18:08
25 mars 2010 à 18:08
Bon d'accord je crois que j'ai saisis l'essentiel,cad qu'il faut que je mette ma variable dans un fichier externe en .h
et je lui attribue une valeur dans un autre fichier en .c puis vais lier ces deux fichiers.
Mais comment fait-on pour les lier?
Et si ma variable ne prend de valeur que dans mon programme suis-je obligé de faire un .c?
Désolé si j'ai mal compris et merci de m'aider :)
et je lui attribue une valeur dans un autre fichier en .c puis vais lier ces deux fichiers.
Mais comment fait-on pour les lier?
Et si ma variable ne prend de valeur que dans mon programme suis-je obligé de faire un .c?
Désolé si j'ai mal compris et merci de m'aider :)
Wazza56
Messages postés
379
Date d'inscription
dimanche 23 septembre 2007
Statut
Membre
Dernière intervention
31 mars 2014
27
31 mars 2010 à 17:18
31 mars 2010 à 17:18
Merci merci merci beaucoup les gars :)
Désolé de répondre si tard mais je n'est pas vraiment eu le temps récemment de passer et de tester.
Mais cela fonctionne maintenant.
Bon certes j'ai encore quelques petits trucks à revoir parce qu'il y a des bug mais plus d'erreurs!!!
Merci beaucoup.
++
:)
Désolé de répondre si tard mais je n'est pas vraiment eu le temps récemment de passer et de tester.
Mais cela fonctionne maintenant.
Bon certes j'ai encore quelques petits trucks à revoir parce qu'il y a des bug mais plus d'erreurs!!!
Merci beaucoup.
++
:)