Salut,
Le problème c’est que tu définis une constante globale dans un fichier d’en-tête. Ce fichier étant inclus plusieurs fois dans plusieurs unités de traduction différente, tu vas définir plusieurs fois le même objet.
Arrivé à l’édition des liens, l’éditeur de liens se retrouve avec plusieurs définition pour le même objet et il gueule.
Deux solutions :
1) Déclarer ta constante globale en statique
static const unsigned char STATJOBS [MAX_CMD_BYTE] = {0x1A,0x00,0x00,0xFF};
Ce qui va limiter la portée de ta variable globale à l’unité de traduction courante. Par contre, misc.o et ursul.o auront chacun un objet STATJOBS (qui auront donc des adresses différentes).
2) Faire une vraie globale.
Dans ce cas il faut uniquement mettre la déclarations dans l’en-tête (et préciser extern), pas de définition.
Puis, dans un (et un seul) des fichiers d’implémentation (ursul.c ou misc.c, au choix) tu pourras définir ta constante.
Dans protocol.h
extern const unsigned char STATJOBS [MAX_CMD_BYTE];
Et dans ursul.c par exemple :
const unsigned char STATJOBS [MAX_CMD_BYTE] = {0x1A,0x00,0x00,0xFF};
Dans ce cas, STATJOBS sera le même pour tout le monde (une globale vraiment globale).
Partager