Undefined reference: C
Résolu
Wazza56
Messages postés
379
Date d'inscription
Statut
Membre
Dernière intervention
-
Wazza56 Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
Wazza56 Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Undefined reference: C
- Reference pto - Accueil - Box & Connexion Internet
- Indice de référence des loyers - Guide
- Excel la référence n'est pas valide - Forum Excel
- Différence entre note conceptuelle et termes de référence - Forum Gestion de projet
- Excel référence circulaire ✓ - Forum Excel
6 réponses
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.
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.
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!
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.
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,
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :)