Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Globales Array

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.07.2003
    Beiträge
    27

    Question Globales Array

    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
    Code:
     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

  2. #2
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    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.
    I haven't lost my mind - It's somewhere on a backup-disc

  3. #3
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    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 Desweiteren ist anzumerken, dass die Verwendung von globalen Variablen von schlechtem Stil zeugen.

    Cu
    André
    C und C++

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    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.

  5. #5
    Registrierter Benutzer
    Registriert seit
    08.11.2002
    Ort
    Hennef
    Beiträge
    106
    hallo,

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

    gruß

  6. #6
    Registrierter Benutzer
    Registriert seit
    28.07.2003
    Beiträge
    27
    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

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

    mfg peecee

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.07.2003
    Beiträge
    27

    Danke

    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

  8. #8
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    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.

  9. #9
    Registrierter Benutzer
    Registriert seit
    28.07.2003
    Beiträge
    27
    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

    mfg

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •