Discussion:
XCode C99 : duplicate symbol
(trop ancien pour répondre)
kurtz le pirate
2022-04-19 08:26:34 UTC
Permalink
Bonjour,

Si de vieux dinosaures passent par la...

Dans mon projet, j'ai ces fichiers :
a_structures.h
a_toolbox.h
a_toolbox.c
a_m.h
a_m.c
main.c

Le fichier a_structures.h ne contient que des définitions de structures.

Dans main.c j'ai :
#include "a_structures.h"
#include "a_toolbox.h"
#include "a_m.h"


J'ai un tableau de chaines :
const char * DaysNames[] = {
"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi" };

que j'utilise dans le main.c :
printf(" Le 30/6/1954 est un %s (%d)\n", DaysNames[dayofweek], dayofweek);



Si le tableau est déclaré dans le main.c pas de problème.

Si le tableau est déclaré dans le a_structures.h, le compilateur sort
une erreur :
duplicate symbol _DaysNames in:
/Users/.../main.o
/Users/.../a_m.o
/Users/.../a_toolbox.o

Et la je ne comprends plus...
Si vous avez une idée. Merci d'avance.
--
kurtz le pirate
compagnie de la banquise
Olivier Miakinen
2022-04-22 10:30:16 UTC
Permalink
Bonjour,
Post by kurtz le pirate
Bonjour,
Si de vieux dinosaures passent par la...
Plutôt que de chercher des dinosaures sur un groupe Mac, pourquoi
ne pas poser la question sur le groupe où c'est en charte ? Je fais
suivre.
Post by kurtz le pirate
a_structures.h
a_toolbox.h
a_toolbox.c
a_m.h
a_m.c
main.c
Le fichier a_structures.h ne contient que des définitions de structures.
#include "a_structures.h"
#include "a_toolbox.h"
#include "a_m.h"
const char * DaysNames[] = {
"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi" };
printf(" Le 30/6/1954 est un %s (%d)\n", DaysNames[dayofweek], dayofweek);
Si le tableau est déclaré dans le main.c pas de problème.
Tel que tu l'as écrit, il n'est pas seulement déclaré mais défini.
Post by kurtz le pirate
Si le tableau est déclaré dans le a_structures.h, le compilateur sort
/Users/.../main.o
/Users/.../a_m.o
/Users/.../a_toolbox.o
Et la je ne comprends plus...
Si vous avez une idée. Merci d'avance.
Parce qu'en le mettant dans un .h inclus dans différents .c, tu le
redéfinis dans chacun des .c .

Plusieurs solutions possibles : soit tu le définis en 'static', auquel
cas chaque .c aura sa propre copie du tableau, soit tu le déclares
uniquement dans le .h et tu le définis dans un seul .c .
--
Olivier Miakinen
Loading...