Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Read-only-Export funktioniert nur teilweise



nobody0
06-07-2005, 16:53
Um Redundanz zu vermeiden verwende ich eine Header-Datei, in der nur dort und in nur einer Zeile eine Variable deklariert wird, die read-only exportiert wird und intern read-write deklariert wird:



#ifndef _TEMP_H
# define _TEMP_H

// export read-only
#ifdef _TEMP_C
# define CONST
# define u16_temperatur_INIT =0
#else
# define CONST extern const
# define u16_temperatur_INIT
#endif

// temperature in ADC12-Units
CONST volatile u16 u16_temperatur u16_tempereatur_INIT;

#endif // _TEMP_H


Das funktioniert aber nur teilweise, da die Initialisierung bzw. Nicht-Initialisierung nicht funktioniert:
> make main.o
In file included from temp.c:18:
inc/temp.h:18: syntax error before "u16_tempereatur_INIT"
inc/temp.h:18: warning: type defaults to `int' in declaration of `u16_tempereatur_INIT'
>make temp.c
inc/temp.h:18: syntax error before "u16_tempereatur_INIT"
inc/temp.h:18: warning: type defaults to `int' in declaration of `u16_tempereatur_INIT'
temp.c: In function `adc_12':
temp.c:40: `u16_temperatur' undeclared (first use in this function)

Irgendwelche Vorschläge? :confused:

sticky bit
06-07-2005, 18:49
Tippfehler (laut der Compiler-Meldung wohl Zeile 18)? Versuch mal obs das war...


#ifndef _TEMP_H
# define _TEMP_H

// export read-only
#ifdef _TEMP_C
# define CONST
# define u16_temperatur_INIT =0
#else
# define CONST extern const
# define u16_temperatur_INIT
#endif

// temperature in ADC12-Units
CONST volatile u16 u16_temperatur u16_tempereatur_INIT;

#endif // _TEMP_H


P.S.: Noch n Tipp, das ganze vorher evtl. einfach nur durch den Präprozessor jagen (man cpp für gcc oder je nach verwendetem Compiler) und gucken was da so bei raus kommt...

nobody0
06-07-2005, 22:08
Ja, danke, das war es:



#ifndef _TEMP_H
# define _TEMP_H

// export read-only
#ifdef _TEMP_C
# define CONST
# define u16_temperatur_INIT =0
#else
# define CONST extern const
# define u16_temperatur_INIT
#endif

CONST volatile u16 u16_temperatur u16_temperatur_INIT; // temperature in ADC12-Units

#endif // _TEMP_H


Das ist schön orthogonal, exportiert die Varibale Read-Only und ist auch deutlich besser als dieselbe Variable in der *.c und *.h-Datei zu deklarieren und irgendwo zu Initialisieren ;)