-
Das extern sagt dem Compiler, dass es sich hierbei nur um eine Deklaration handelt. Denn ansonsten wäre der Syntax für Deklaration und Definition einer gloaben Variable der gleiche.
Sobald du eine globale Variable in mehr als einem .c File verwenden willst, musst du die Variable mit extern im .h File Deklarieren und in EINEM C-file definieren.
Verwendest du die globale Variable aber nur innerhalb einer .c-Datei, dann brauchst du in dem Header File gar nichts machen. Dann reicht die globale Definition in dem C-File in dem du die Variable verwenden willst. Natürlich muss die Definition der Variable in dem C-File dann vor der ersten Verwendung erfolgen
Ich hoffe ich habe dich jetzt nicht ganz verwirrt? ;-)
-
Wenn Du in einem AVR eine CONST verwendest, dann nimm doch gleich #define, das ist unterm Strich egal, da das Const wahrscheinlich wegoptimiert wird. Ein define kann man aber im Header machen, und somit ohne extern usw. überall benutzen.
#defines werden vom Precompiler in die genutzen Stellen eingesetzt, so dass der Compiler die defines garnicht mehr sieht, sondern nur noch das Eingesetzte.
Wenn Du unbedingt auf den Typ bestehst, dann Caste es im define:
Code:
#define a ((uint8_t)1234)
-
Hmm, dass halte ich für einen nicht ganz so sauberen Weg. Auch wenn das const "Weg-optimiert" wird, so bietet es dem Compiler eine Zusatzinformation über den Typ und kann so die Überprüfungsmöglichkeiten des Compilers erhöhen.
Bei uns sind z.B. in den Richtlinien für embedded Software Präprozessormakros (da gehören Defines für Konstanten auch dazu) verboten.
Aber letztendlich ist das ein Thema über das man glaube ich ewig philosophieren kann ;-)