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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); } ...Le résultat est que je n'arrive pas à afficher
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
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.
Partager