Hallo allerseits, ist es möglich das zwei Funktionen sich eine static Variable teilen, die sonst den anderen Funktionen nicht bekannt ist?
Nein, nicht im Sinne von "static local variable". Aber Du kannst eine Translation Unit mit zwei Funktionen haben, die beide auf eine "static global variable" zugreifen und außer den zwei Funktionen, keine weitere Funktionen beinhaltet.
Wenn diese beiden Funktionen allein in einer .c Datei stehen in der die variable als "static" globale Variable definiert ist. Alternativ die Funktionen in eine Klasse packen und die Variable dort als private Member-Variable machen.
Murkser schrieb: > Aber Du kannst eine Translation Unit mit zwei Funktionen haben, die > beide auf eine "static global variable" zugreifen und außer den zwei > Funktionen, keine weitere Funktionen beinhaltet. Kannst du mal ein einfaches Beispiel zeigen?
Dieter Coba schrieb: > Kannst du mal ein einfaches Beispiel zeigen?
1 | static int x; |
2 | |
3 | void SetX(int NewX){ |
4 | x = NewX; |
5 | }
|
6 | |
7 | int GetX(void){ |
8 | return x; |
9 | }
|
Ja das geht, aber jede andere Funktion in der selben C-Datei könnte die Variable auch sehen und darauf zugreifen.
Christian schrieb: > Ja das geht, aber jede andere Funktion in der selben C-Datei könnte die > Variable auch sehen und darauf zugreifen. Ja, das ist richtig. Aber in welcher Programmiersprache? :-)
Bitflüsterer schrieb: > Christian schrieb: >> Ja das geht, aber jede andere Funktion in der selben C-Datei könnte die >> Variable auch sehen und darauf zugreifen. > > Ja, das ist richtig. Aber in welcher Programmiersprache? :-) Meine Güte. Ein Lesefehler. Sorry.
Man kann die Variable per linker auf ein bestimmte Adresse im Speicher legen und in den beiden Funktionen einen pointer darauf haben.
Christian schrieb: > Ja das geht, aber jede andere Funktion in der selben C-Datei könnte die > Variable auch sehen und darauf zugreifen. Und? Dann leg halt keine weiteren Funktionen da rein. Technisch sind statische Variablen in C sowieso nix anderes als globale Variablen mit eingeschränkter Sichtbarkeit. Sogar in C++, wo man Sichtbarkeitsbereiche beliebig schachteln kann, ist das am Ende technisch das gleiche. Alles nur syntaktischer Zucker. XL
absolute v schrieb: > Man kann die Variable per linker auf ein bestimmte Adresse im Speicher > legen und in den beiden Funktionen einen pointer darauf haben. Das ist aber dann doch etwas übertrieben, nur um den Zugriff von anderen Funktionen aus zu unterbinden. Das selbe könnte man erreichen, indem man eben diese Zugriffe einfach nicht macht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.