Bonjour à tous,
J'ai un soucis que j'aimerais comprendre sur l'utilisation d'un typedef struct en langage C. J'explique:
J'ai déclaré un typedef struct dans application.h que je veux rendre utilisable dans un autre module dénommé temperature (.c et .h).
Dans temperature.h j'appelle application.h. Dans temperature.c j'apelle temperature.h. Je déclare une variable avec mon nouveau type dans temperature.c et la rend portable en la redéclarant en extern dans temperature.h.
J'ai un fichier application.h qui contient cela
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
22
23 #ifndef SOURCES_APPLICATION_H_ #define SOURCES_APPLICATION_H_ #include "TypeDef.h" #include "Temperature.h" typedef struct { FLOAT64 CoefficientA1_F64; FLOAT64 CoefficientA2_F64; FLOAT64 CoefficientB0_F64; FLOAT64 CoefficientB1_F64; FLOAT64 CoefficientB2_F64; FLOAT32 OldOldRawValue_F32; FLOAT32 OldRawValue_F32; FLOAT32 RawValue_F32; FLOAT32 OldOldFilteredValue_F32; FLOAT32 OldFilteredValue_F32; FLOAT32 FilteredValue_F32; }ButterwothSecondOrderFilterParameter_str; #endif
Dans temperature.c j'ai :
Dans un fichier temperature.h j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #include "Temperature.h" ButterwothSecondOrderFilterParameter_str TMP_TemperatureLowPassFilterParameter_STR;
J'ai volontairement pas affiché les autres déclarations (d'include, variables, prototypes de fonction, enum, etc....) sinon ce serait lourd à l'affichage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ifndef SOURCES_TEMPERATURE_H_ #define SOURCES_TEMPERATURE_H_ #include "TypeDef.h" #include "Application.h" extern ButterwothSecondOrderFilterParameter_str TMP_TemperatureLowPassFilterParameter_STR; #endif
A la compilation j'ai un fameux : unknown type name 'ButterwothSecondOrderFilterParameter_str' sur temperature.h et je ne vois pas où mon erreur....
J'ai utilisais ce nouveau de type de variable dans un autre module et j'ai le même problème.
Quand je supprime la déclaration extern dans temperature.h l'erreur disparait.
Ce que je ne comprend pas non plus, c'est que j'ai un fichier TypeDef.h qui comprend uniquement des typedef avec lequel je fonctionne de la même manière sans aucun soucis sur tous mes modules. Quand je déplace mon typedef struct dans ce fichier (et que je l’appelle dans temperature.h) l'erreur disparaît.
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
22
23
24
25
26
27
28 #ifndef SOURCES_TYPEDEF_H_ #define SOURCES_TYPEDEF_H_ typedef unsigned char BOOL; #define TRUE 1 #define FALSE 0 typedef char CHA; typedef unsigned char UINT8; typedef signed char SINT8; typedef unsigned short UINT16; typedef signed short SINT16; typedef unsigned long dword; typedef unsigned long UINT32; typedef signed long SINT32; typedef unsigned long long UINT64; typedef signed long long SINT64; typedef float FLOAT32; typedef double FLOAT64; typedef long double FLOAT80; #endif
Partager