Forum: Mikrocontroller und Digitale Elektronik Zugriff auf structs in anderer Source-Datei


von Mark M. (mom-jovi)


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.

von Peter (Gast)


Lesenswert?

dann leg doch die Structur in eine header datei und binde sie in beiden 
C datein per include ein.

von Mark M. (mom-jovi)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

Mark M. schrieb:
> Ich würde die Struktur aber gerne da lassen, wo sie ist.

dann sage uns erstmal wo sie ist, dann bis jetzt konnt ich noch nicht 
rauslesen wo sie denn deklariert ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das typedef struct ... gehört in eine Headerdatei.

von Seltsam (Gast)


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.

von Seltsam (Gast)


Lesenswert?

Bzw. ein Umweg wäre ein Zugriff über eine Funktion.

von Kai S. (zigzeg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.