Zugriff auf structs in anderer Source-Datei

OP #2062172
Ich habe folgende Definition und Deklaration:
1
typedef struct
2
{                        
3
   unsigned long currentCluster;
4
   unsigned int byteCount;  
5
   unsigned long firstCluster;    
6
   unsigned long fileSize;
7
   unsigned long dirLocation;    
8
   unsigned char sectorCount;    
9
   signed char fileHandle;
10
   unsigned char updateDir;
11
} file;
12

13
static file openedRead[BUFFER_SIZE];

Nun möchte ich auch in Funktionen, die außerhalb dieser c-Datei sind, 
auf openedRead zugreifen.
Ich habs bereits mit
1
extern struct file;
2
extern file openedRead;
versucht, aber der Compiler sagt, dass file ein undefinierter Bezeichner 
sei.
Wie bekomm ich das mit möglichst geringem Aufwand hin? Ich möchte 
eigentlich kein global.h erstellen, in dem dann diese Definitionen und 
Deklarationen drinstehen.
Gast
> static file openedRead[BUFFER_SIZE];
> Nun möchte ich auch in Funktionen, die außerhalb dieser c-Datei sind,
> auf openedRead zugreifen.

Geht nicht, wenn du auf static beharrst. Mit static ist die Sichtbarkeit 
der Variablen openedRead auf das Sourcefile begrenzt in dem die Variable 
definiert wird.
Mark M. schrieb:
> Ich würde die Struktur aber gerne da lassen, wo sie ist.
> Mit
>
1
extern struct file openedRead[BUFFER_SIZE]
 müsste es doch
> eigentlich gehen, wenn die Header mit der Struktur inkludiert ist.

Genau, der typedef kommt in den header. Der header wird von beiden C 
Dateien includiert. Die Definition kommt in die eine C Datei, dabei muss 
das static weg (wichtig !), denn static heisst (bei globalen Variablen 
zumindest) "nur sichtbar in diesem Modul" (=diese C Datei) .

In die andere C Datei dann ein "extern struct ..." wie vorgeschlagen.

Sauberer ist es aber alle Zugriffe einer Datenstruktur in einer Datei zu 
machen, und dann nur die Zugriffs-Funktionen ueber den Header bekannt zu 
machen. Nennt sich auch modulare Programmierung.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.