variables globales et plusieurs fichiers.h et .c
Bonjour,
Je viens de lire en long et en large le sujet sur "mot clé extern" et il tombait bien car j'ai un problème similaire lié à la définition, déclaration et initialisation de variables globales.
Situation:
Sous windowsXP, environnement Metrowerks Code Warrior Palm OS
J'ai 9 fichiers.h relatifs à 9 fichiers.c
Dans ces 9 fichiers.h il y a un fichier.h que j'ai nommé "globale.h" et lié respectivement au fichier "globale.c".
Le fichier "globale.h" contient actuellement:
- des définition de structures (d'une 20taine de paramètres),
- des prototypes de fonctions (avec le mot clé extern),
- des déclarations de variables globales (avec le mot clé extern).
Ce fichier "globale.h" est pratiquement inclus (instruction #include) dans tous les fichiers.c
Le fichier "globale.c" contient actuellement:
- des déclarations de toutes les variables globales identifiées par le mot clé "extern" relatif au fichier "globale.h",
- des variables d'initialisations de ces variables globales.
La compilation: aucun message d'erreur, ni d'avertissement.
Lorsque je lance mon application, certaine variables globales sont modifiées suivant le fichier.c où des fonctions leurs font appels.
Apparemment mes fonctions globales ne sont pas modifiées partout pareille.
Exemple de code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
// fichier globale.h
#ifndef _GLOBALE_H
#define _GLOBALE_H
typedef struct
{
char name[16];
ulong delay;
ushort baud;
} _COM;
extern _COM Com;
// Prototypes
extern int CopyCom(_COM *dest, _COM *src);
extern void Aff(void);
#endif |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
// fichier globale.c
#include <stdlib.h>
#include <stdio.h>
...
#include "globale.h"
_COM Com,
DefaultCom = {
"NoName\0",
100000L,
9600
};
void Aff(void)
{
cprintf("\nCom.delay=%lu\0", Com.delay);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
// fichier FctCom.c
#include <stdlib.h>
#include <stdio.h>
...
#include "FctCom.h"
#include "globale.h"
int CopyCom(_COM *dest, _COM *src)
{
strcpy(dest->name, src->name);
dest->delay = src->delay;
dest->baud = src->baud;
return(1);
}
... |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
// fichier Application.c
#include <stdlib.h>
#include <stdio.h>
...
#include "globale.h"
int main(int argc, char **argv)
{
argc = 0;
argv = NULL;
Aff();
CopyCom(&Com, &DefaultCom);
Aff();
return(0);
} |
Le résultat est que je n'arrive pas à afficher
Com.delay=100000 mais plutôt une valeur différente.
La taille de mes structures est bcp plus grande et mon programme aussi.
Je voudrai savoir quelle méthode vous me conseillez pour donc copier dans un structure des valeurs par défaut, (un peu comme un constructeur...) et pq je n'obtient pas les bonnes valeurs dans ma structure Com qd mon DefaultCom est placé en globale.c par contre s'il est placé en Application.c là ça fonctionne.