Hallo, ich möchte auf diese Struktur in einer anderen C Datei zugreifen
können. Quasi soll die MAC-Adresse verändert werden. Mit einer extern
Anweisung könnte ich dann auf diese Struktur zugreifen. Wie könnte man
sowas realisieren?
Wenn die struct global ist, dann extern deklarieren, dann brauchst du
auch keinen Pointer.
Wenn sie static ist (Modul-global), kannst du einen globalen Pointer
nehmen und darüber zugreifen.
Oder du schreibst eine Setter-Funktion, die das macht.
leo schrieb:> Quasi soll die MAC-Adresse verändert werden. Mit einer extern> Anweisung könnte ich dann auf diese Struktur zugreifen. Wie könnte man> sowas realisieren?
Ich würde die Struktur mit nem typedef als Typ definieren (z.B.
"T_NETIF") und die Definition in ein gemeinsames Headerfile eintragen.
Dann kannste in der anderen C-Datei mit "extern T_NETIF xnetif" darauf
zugreifen.
Nop schrieb:> Ich würde die Struktur mit nem typedef als Typ definieren (z.B.> "T_NETIF") und die Definition in ein gemeinsames Headerfile eintragen.> Dann kannste in der anderen C-Datei mit "extern T_NETIF xnetif" darauf> zugreifen.
Es geht auch ohne typedef, ein
1
externstructnetifxnetif;
genügt, sofern die Deklaration der Struktur selbst auch zugänglich
ist, d.h. welche Elemente sie hat und welche Typen diese haben.
leo schrieb:> Auf folgende Struktur müsste ich ebenfalls von außen zugreifen. Wie wird> sowas dann realisiert?
Was ist da jetzt anders als bei deinem ersten Beispiel?
leo schrieb:> static XMC_ETH_MAC_t eth_mac =
static weglassen, dann funktioniert auch extern
> Wenn sie static ist (Modul-global), kannst du einen globalen Pointer> nehmen und darüber zugreifen.
So wie Dirk.B. schreibt ist das Modul-global (mit static)
static = nur in diesem .c file zugreifbar
extern = von anderen .c dateien zugreifbar
extern static = von anderen .c dateien zugreifbar und nur in diesem .c
file zugreifbar => ergibt keinen sinn
leo schrieb:> extern static XMC_ETH_MAC_t eth_mac;>> --> error: multiple storage classes in declaration specifiers
Klar. Wenn Du etwas mit static im File-Scope deklarierst, kannst Du
darauf in einem anderen File nicht mit extern zugreifen. Das ist der
Sinn von file-static.
leo schrieb:> Auf folgende Struktur ...
Vom bereits beschriebenen static -Problem abgesehen zeigst Du auch
hier nur die Initialisierung einer Variablen vom Typ der Struktur, nicht
aber deren Deklaration selbst.
Dirk B. schrieb:> Wenn sie static ist (Modul-global), kannst du einen globalen Pointer> nehmen und darüber zugreifen.>> Oder du schreibst eine Setter-Funktion, die das macht.
Ich würde letzteres bevorzugen.
Daniel A. schrieb:> static = nur in diesem .c file zugreifbar
Wenn man die Adresse des Objekts hat, dann ist es auch von einem anderen
Modul aus zugraifbar.
> extern static = von anderen .c dateien zugreifbar und nur in diesem .c
"extern static" ist in C nicht möglich. Und
1
staticintx;
2
externintx;
Ist zwar möglich in C, bedeutet aber etwas anderes.
Johann L. schrieb:> Wenn man die Adresse des Objekts hat, dann ist es auch von einem anderen> Modul aus zugraifbar.
Sicher, aber das kann nicht der Linker erledigen.