Zugriff auf structs in anderer Source-Datei

OP #2062172
Lesenswert?
• ▲
▼
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 #2062236
Lesenswert?
• ▲
▼
> 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.
#2062244
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.