>Da es eine globale Variable ist und davon ausgegangen bin dass mit
>extern diese Variable auch sichtbar ist.
>Genügt es nur in einer Datei das extern zu schreiben oder muss dass in
>allen Dateien vorhanden sein.
>Wenn ich aber in unterschiedlichen Dateien
1 | extern OS_EVENT *Semaphore
|
>und
>schreibe greift es schon auf dieselbe Variable obwohl es
>unterschiedlicher Speicher ist.
Hier kommen zwei resp. drei irrige Auffasssungen zusammen.
Wenn sich "es" in Deinem ersten Satz auf
1 | extern OS_EVENT *Semaphore
|
bezieht so handelt es sich nicht um eine Variable.
Vielmehr ist das die Deklaration einer Variablen.
Diese sagt "es existiert an irgendeiner anderen Stelle im Projekt (also
in einer anderen C-Datei) eine Variable dieses Namens. Bitte greife,
wenn ich diesen Namen in dieser_ C-Datei verwende auf den _dort
reservierten Speicher zu.
Die Lesart des Wortes "extern" als "mache diese Variable, von aussen
sichtbar" ist falsch. Vielmehr muss dies, wie eben beschrieben, als
"nimm an, das irgendwo anders eine Reservierung existiert", gelesen
werden.
Im Gegensatz dazu ist
keine Deklaration sondern eine sog. "Definition". Hier wird tatsächlich
Speicherplatz reserviert.
Demzufolge ist auch der Nachsatz
>...schreibe greift es schon auf dieselbe Variable obwohl es
>unterschiedlicher Speicher is
falsch. Denn der Speicher wird nie mehrfach reserviert obwohl dann alle
Verweise doch auf die selbe Variable zugreifen. Das wäre garnicht
sinnvoll, diesen Speicher mehrfach zu reservieren. Entweder dürfte dann
doch nur einer benutzt werden, oder bei der Änderung einer der
Speicherbereiche müssten alle anderen die für die selbe Variable
reserviert sind mit geändert werden.
Ich empfehle Dir die intensive Lektüre eines guten C-Buches zu den
Stichworten "Deklaration", "Definition" und den Schlüsselworten "extern"
und "static".