PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Globales Array



peecee
07-08-2003, 19:12
Ich hab da ein Array field [x][x] und es ist ausserhalb irgendeiner Funktion deklariert.
Also ist mein Array field[x][x] eine globale Variable.

Nach meinem Wissen ist eine globale Variable überall im Programm sichtbar.

Meine Programm besteht inzwischen aus 4 Quellcode Dateien und einer Header datei. In allen 4 Quellcode Dateien benutzen Funktionen das Array.
Bis jetzt wurde das Array in der main Funktion deklariert und jeder Funktion übergeben.
Jetzt hab ich aber eine Funktion die erst über 2 andere Funktionen aufgerufen wird - die beide das Array nicht benötigen - also dacht ich mir machst du eine globale Variable daraus und du musst keiner Funktion mehr das Array übergeben.

Aber - jetzt kommt endlich die Frage ;) - ich definiere das Array in der ersten Quellcodedatei so wie oben beschrieben, und es ist nicht in den anderen Dateien sichtbar.
Die Definition lautet genau

int field [x][x]; Merke: es ist keine static Variable
Warum ist das so ??????

Derweilen hab ich mir damit geholfen das Array in der Header Datei zu deklarieren die in jede Quellcodedatei included ist.
Das funktioniert auch, aber ich dachte dann müsste eine Meldung im Stile von "redeclaration of field" kommen.
Warum ist das nicht so ??????
Wo liegt meine Denkfehler ????

Ach ja ich benutzte C und als IDE DevC++ also gcc als Compiler.

Please Help
peecee

SeeksTheMoon
07-08-2003, 19:29
Easy: Das Feld wird in der Header-Datei deklariert:
int *feld[]; oder wie auch immer. Durch den inlude-guard (#ifndef __HEADER__) wird daf@r gesorgt, dass die Header nicht mehrfach eingebunden wird und es somit keine Probleme mit mehrfacher Deklaration gibt.

Berufspenner
07-08-2003, 19:32
Original geschrieben von SeeksTheMoon
Easy: Das Feld wird in der Header-Datei deklariert:
int *feld[]; oder wie auch immer. Durch den inlude-guard (#ifndef __HEADER__) wird daf@r gesorgt, dass die Header nicht mehrfach eingebunden wird und es somit keine Probleme mit mehrfacher Deklaration gibt. Shit, war zu langsam :rolleyes: Desweiteren ist anzumerken, dass die Verwendung von globalen Variablen von schlechtem Stil zeugen.

Cu
André

wraith
07-08-2003, 19:38
Original geschrieben von SeeksTheMoon
Easy: Das Feld wird in der Header-Datei deklariert:
int *feld[]; oder wie auch immer. Durch den inlude-guard (#ifndef __HEADER__) wird daf@r gesorgt, dass die Header nicht mehrfach eingebunden wird und es somit keine Probleme mit mehrfacher Deklaration gibt.
Na,so wie ich das verstanden habe,hat der OP doch 4 C Dotdateien,in denen er den Header inkludiert.Und Includeguards haben keine Einfluß über Translationunits hinweg.

pik7
07-08-2003, 19:47
hallo,

vieleicht ist auch ein "extern int field [x] [x]"
in den restlichen Quellcode Dateien nicht so verkehrt.
mal so als hint.

gruß

peecee
07-08-2003, 19:52
Original geschrieben von SeeksTheMoon
Easy: Das Feld wird in der Header-Datei deklariert:
int *feld[]; oder wie auch immer. Durch den inlude-guard (#ifndef __HEADER__) wird daf@r gesorgt, dass die Header nicht mehrfach eingebunden wird und es somit keine Probleme mit mehrfacher Deklaration gibt.

aber ich habe in meiner Header datei keine #ifndef __HEADER__ Anweisung stehen. oder geht das auch deswegen weil das z.b. in der stdio.h steht ??
die allerdings in meiner privaten Header Datei eingebunden wird.
Kann mir das jemand Erklären ?


Original geschrieben von Berufspenner
Desweiteren ist anzumerken, dass die Verwendung von globalen Variablen von schlechtem Stil zeugen.

Also ich finde ein globales Array schöner auf das sowieso 80% der Funktionen hinarbeiten, als ein Array über drei Funktionen zu übergeben das nur in der 3 Funktion gebraucht wird.
Dazu spar ich mit der globalen Variante noch mindestens
4 Byte Hauptspeicher :D

Kanns du mir aber trotzdem veraten warum meine globales array nicht in jeder Quellcode Datei sichtbar ist ??

mfg peecee

peecee
07-08-2003, 19:54
Original geschrieben von pik7
hallo,

vieleicht ist auch ein "extern int field [x] [x]"
in den restlichen Quellcode Dateien nicht so verkehrt.
mal so als hint.

gruß

Danke das wars !!!!!

mfg peecee

wraith
07-08-2003, 20:00
Original geschrieben von peecee

Also ich finde ein globales Array schöner auf das sowieso 80% der Funktionen hinarbeiten, als ein Array über drei Funktionen zu übergeben das nur in der 3 Funktion gebraucht wird.


Na,dann wäre es schöner alle Funktionen,die das Array benötigen in einer Translationunit zu halten,und das Array static zu deklarrieren.
Damit hättest du ein wenig Kasplung.
Alle anderen Funktionen,die das Array brauchen,können nur noch über die speziellen Funktionen zugreifen.

peecee
07-08-2003, 20:15
Original geschrieben von wraith
Na,dann wäre es schöner alle Funktionen,die das Array benötigen in einer Translationunit zu halten,und das Array static zu deklarrieren.
Damit hättest du ein wenig Kasplung.
Alle anderen Funktionen,die das Array brauchen,können nur noch über die speziellen Funktionen zugreifen.

Mit Translationunit meinst du eine Quellcodedatei oder ??

Stimmt gute Idee alle Funktionen die das Array verändern kommen in eine Datei.
Dann schreib ich noch eine Funktion get_array() und ich kann aus jeder Datei das Array ansehen aber nicht ändern. Das gefällt mir :rolleyes:

mfg