Hi,
Da ich verschiedene Dateien habe und Funktionen habe, die die selbe
variable benötigen, habe ich sie global deklariert. Dies funktioniert
auch bis auf den array.
global.h
1
EXTERN unsigned int State_array[4];
2
EXTERN unsigned int State_array_Counter;
hauptcode
1
void init_variables(void){
2
State_array[4] = {0x02, 0x03, 0x06, 0x07};
3
State_array_Counter = 0;
4
}
Jedoch unterstreicht er mir bei dem State_array das gleichzeichen und
die geschweifte Klammer zu mit der Fehlermeldung
unexpected Tocen: =
bzw.
unexpected Tocen: }
bei dem State_array_Counter gibt es keinen Fehler. Muss ich bei einem
array noch etwas besonderes berücksichtigen?
Mark
Mark schrieb:> Jedoch unterstreicht er mir bei dem State_array das gleichzeichen und> die geschweifte Klammer
Wenn du versuchst 4 Werte gleichzeitig in die 5te Arrayzelle zu
schreiben, und das bei einem Array, welches nur 4 Zellen hat....
Naja, als Compiler wäre ich da auch stinkig.
Diese Schreibweise mit dem {} klappt nur, wenn er Compiler das Array
initialisiert (wie in Ulrichs Beispiel). Nicht wenn dein Programm die
Werte zuweist.
In deiner Funktion musst du das anders machen. Z.B die 4 int einzeln
zuweisen.
slap in my facd :(
ah ja, da hast du recht, das würde mich auch ankotzen.
Das war auch der Fehler.
Dadurch, dass diese Variable immer gleich bleibt habe ich sie direkt in
globa.h beschrieben mit
static unsigned int State_array[4] = {0x02, 0x03, 0x06, 0x07};
ja, dadurch, dass diese global ist und immer gleich bleibt, habe ich
diese in global.h geschrieben. da ich in mehreren dateien global.h
aufrufe, wird diese so nur einmal beschrieben. ansonsten habe ich immer
die Fehlermeldung 'multiple declaration of state_array' bekommen.
für mich bedeutet static, dass diese nur einmal deklariert wird. Ist
dies nicht so?
Erstmal:
Einfach irgendwas auszuprobieren, nur damit Fehlermeldungen
verschwinden, ist selten eine gute Idee!
So wie ich das static da verstehe:
Mark schrieb:> da ich in mehreren dateien global.h> aufrufe
Wird diese Variable in jedem dieser Gültigkeitsbereiche erstellt.
Du hast also nicht eine einzige globalen sondern etliche.
Für jede C/C++ Datei eine.
Mark schrieb:> für mich bedeutet static, dass diese nur einmal deklariert wird. Ist> dies nicht so?
Nein. Es bedeutet, daß es nur in dem C-File, in dem es definiert ist
(bzw. in dem der Header inkludiert ist), sichtbar ist. Wenn du den
Header in 10 C-Files einbindest, bekommst du auch 10 Instanzen der
Variable, die aber jeweils nur im dazugehörigen File sichtbar sind.
Deshalb verschwindet die Fehlermeldung.
Generell haben Variablendefinitionen in Headerfiles nichts verloren.
Dort werden sie nur extern deklariert.
??? schrieb:> Dann bekommst du keine mehrfache Inkludierung
Das ist so nicht richtig!
Das #ifndef verhindert, dass diese Datei mehrfach in EINEN
Gültigkeitsbereich eingebunden wird.
jede c/c++ hat ihren eigenen Gültigketeits- Scihtbarkeitsbereich.
jede dieser Dateien wird einzeln kompliert.
Jedes mal die *.h mit kompiliert.
??? schrieb:> Setz deine .h Files immer in #ifdef clauses:
Das ist allerdings wirklich eine gute Empfehlung.
Was du wahrscheinlich möchtest, ist das:
global.h:
1
#ifndef GLOBAL_H
2
#define GLOBAL_H
3
4
externunsignedintState_array[4];// Deklaration des Arrays
5
6
#endif
hauptcode.c:
1
#include<global.h>
2
3
unsignedintState_array[4]={// Definition und Initialisierung des Arrays
4
0x02,0x03,0x06,0x07
5
};
Merke: Ins Header-File kommen üblicherweise nur Deklarationen, also
nichts, was Speicher belegt. Globale Variablen mit "extern" sind reine
Deklarationen, welche im Header-File verwendet werden können. GLobale
Variablen ohne "extern" hingegen sind Definitionen, sagen also dem
Compiler, dass der für diese Variable Speicher reservieren soll. So eine
Variablendefinition sollten in genau einem .c-File auftauchen.
Damit belegt State_array nur einmal Speicher, es kann aber von jedem
Programmmodul darauf zugegriffen werden, das global.h includet.