Forum: Compiler & IDEs Static und Pointer Übergabe


von Alter F. (alter_falter)


Lesenswert?

Tach zusammen,

hab mal eine kurze Frage:

Kann man den Adresspointer eine Static Variablen aus einer Funktion 
übergeben?
Mein C Buch (K&R) lässt sich lediglich über den Gültigkeitsbereich der 
Variablen aus.

/*

The static declaration can also be applied to internal variables. 
Internal static variables are
local to a particular function just as automatic variables are, but 
unlike automatics, they remain
in existence rather than coming and going each time the function is 
activated. This means that
internal static variables provide private, permanent storage within a 
single function.

*/

Da sie ja für die Wiederverwendung in der Funktion "aufgehoben" wird, 
sollte man annehmen, dass sich die Adresse nicht ändert, oder wie 
verhält sich das?


Konkret:

Ich möchte weitere globale Variablen vermeiden.
Die benötigte Variable muss aber in der Funktion static sein.
Darauf zugegriffen werden soll aber auch aus Main.


Thx!

von Karl H. (kbuchegg)


Lesenswert?

Alter Falter schrieb:
> Tach zusammen,
>
> hab mal eine kurze Frage:
>
> Kann man den Adresspointer eine Static Variablen aus einer Funktion
> übergeben?

Ja, kann man.

Allerdings wirft das sofort die Frage auf, wozu das gut sein soll. Man 
macht die Variable ja static, damit sie von aussen nicht zugreifbar ist. 
Mit dem Rausrücken eines Pointers untergräbt man dieses Ansinnen.

Ist ein bischen so wie das wegschliessen von Dokumenten in einer Kammer 
mit besonderem Sicherheitssschloss aber gleichzeitig stemmt man ein 
schönes großes Loch in die Wand der Kammer.

> Ich möchte weitere globale Variablen vermeiden.
> Die benötigte Variable muss aber in der Funktion static sein.
> Darauf zugegriffen werden soll aber auch aus Main.

Brauchst du dazu die Adresse oder reicht dazu nicht auch der Wert 
alleine auch schon aus.

von Alter F. (alter_falter)


Lesenswert?

Hallo Karl-Heinz,

danke für Deine "erleuchtende" Antwort.
So gesehen hast Du absolut Recht.
Ich hätte allerdings formuliert: Mann macht die Variable static, damit 
sie innen wiederholt zugreifbar bleibt:-)
Wie es scheint hatte ich den falschen Blickwinkel.

Den Wert zurückgeben ist nicht so schön, da es sich um ein Char 
Array[10] handelt.

ok - also global.

von 1234 (Gast)


Lesenswert?

Vorsicht:

static bei globaler Variable != static bei lokaler Variable

Ich hab so das Gefühl der Karl-Heinz und du reden aneinander vorbei.

von Alter F. (alter_falter)


Lesenswert?

hmmm - ich hatte das Gefühl er hatte mich verstanden.

Ich spreche von static lokal und wechsle jetzt zu global ohne static.

von Karl H. (kbuchegg)


Lesenswert?

Alter Falter schrieb:

> Den Wert zurückgeben ist nicht so schön, da es sich um ein Char
> Array[10] handelt.

Ja, das ist natürlich ein spezielles Problem mit Arrays in C.

> ok - also global.

Kann man machen.

Wenn du sie dort weghaben willst geht ja unter Umständen auch noch 
File-lokal. Dann hast du sie zwar nicht global, aber immerhin so, dass 
eine 2.te Funktion innerhalb des Moduls darauf zugreifen kann.

von Alter F. (alter_falter)


Lesenswert?

File-lokal ist eh klar.
Hatte mich zu ungenau ausgedrückt.

Thx!

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Alter Falter schrieb:
>> Tach zusammen,
>>
>> hab mal eine kurze Frage:
>>
>> Kann man den Adresspointer eine Static Variablen aus einer Funktion
>> übergeben?
>
> Ja, kann man.
>
> Allerdings wirft das sofort die Frage auf, wozu das gut sein soll. Man
> macht die Variable ja static, damit sie von aussen nicht zugreifbar ist.
> Mit dem Rausrücken eines Pointers untergräbt man dieses Ansinnen.
>
> Ist ein bischen so wie das wegschliessen von Dokumenten in einer Kammer
> mit besonderem Sicherheitssschloss aber gleichzeitig stemmt man ein
> schönes großes Loch in die Wand der Kammer.

Kapselung?


Bitte reduzieren Sie die Anzahl der Zitatzeilen.
Bitte reduzieren Sie die Anzahl der Zitatzeilen.
Bitte reduzieren Sie die Anzahl der Zitatzeilen.
Bitte reduzieren Sie die Anzahl der Zitatzeilen.

von Matthias L. (matze88)


Lesenswert?

Der USBasp Code vom avrdude definiert auch all seine Funktionen static 
und übergibt die dann per Zeiger raus an die avrdude Programmlogik...

von Rolf M. (rmagnus)


Lesenswert?

Johann L. schrieb:
> Kapselung?

Was willst du mit dieser doch sehr langen und ausführlich formulierten 
Frage sagen? Daß du das für Kapselung hältst oder daß du Kapselung als 
Alternative dafür siehst?

> Bitte reduzieren Sie die Anzahl der Zitatzeilen.
> Bitte reduzieren Sie die Anzahl der Zitatzeilen.
> Bitte reduzieren Sie die Anzahl der Zitatzeilen.
> Bitte reduzieren Sie die Anzahl der Zitatzeilen.

Hast du mal daran gedacht, diesen Hinweis zu beherzigen, statt so eine 
alberne Aktion abzuziehen?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Johann L. schrieb:
>> Kapselung?
>
> Was willst du mit dieser doch sehr langen und ausführlich formulierten
> Frage sagen? Daß du das für Kapselung hältst oder daß du Kapselung als
> Alternative dafür siehst?
>
>> Bitte reduzieren Sie die Anzahl der Zitatzeilen.
>> Bitte reduzieren Sie die Anzahl der Zitatzeilen.
>> Bitte reduzieren Sie die Anzahl der Zitatzeilen.
>> Bitte reduzieren Sie die Anzahl der Zitatzeilen.
>
> Hast du mal daran gedacht, diesen Hinweis zu beherzigen, statt so eine
> alberne Aktion abzuziehen?

Die alberne Aktion wird von der Forensoftware geforder.

Sie bestimmt offenbar das Verhältnis von Zitatzeilen zu 
Nicht-Zitatzeilen und verweigert Antworten, wenn sie in ihrer 
Unfehlbarkeit zu dem Schluss kommt, "Das darf nicht sein".

Als Autor finde ich es sinnvoll, Zitate einzufügen, damit Leser wissen, 
worauf ich in meiner Antwort Bezug nehme. Und der Text, auf den ich mich 
beziehe, kann eben länger sein als eine kurze, klare Antwort oder ein 
kutzes Statement. Wenn jemand etwa fragt "Ist das so?" und ich antworte 
"Ja, weil Begründung", dann kann letzteres deutlich kürzer sein als als 
die Frage, und dennoch ist es ein sinnvoller und hilfreicher Beitrag.

Wenn es dich stört, daß die Forensoftware Mitglieder gängelt, dann 
beschwere dich bitte bei der Forensoftware und nicht bei mir.

Wenn diese Software denkt, allein anhand der Anzahl von Zeilen oder 
Buchstaben die Sinnhaftigkeit eines Beitrags bewerten zu können — bitte. 
Dann füge ich eben die Zeilen dazu, die den Beitrag für die Software 
"sinnvoll" machen, aber auch dem Leser klar sagen, daß diese Zeilen 
nicht zum Beitrag gehören sondern von irgendwelchen starren Regeln 
gefordert werden.

Ich versuche lediglich Beiträge zu verfassen, die in sich schlüssig 
sind. Mehr nicht.

von Rolf M. (rmagnus)


Lesenswert?

Johann L. schrieb:
> Als Autor finde ich es sinnvoll, Zitate einzufügen, damit Leser wissen,
> worauf ich in meiner Antwort Bezug nehme.

Das finde ich auch. Allerdings muß man dazu nicht gleich die ganze 
Diskussion mitzitieren.

> Und der Text, auf den ich mich beziehe, kann eben länger sein als eine kurze,
> klare Antwort oder ein kutzes Statement.

Das mag in seltenen Fällen so sein, aber in diesem Fall nicht. Bei 
deinem obigen Posting hätte auch ein wesentlich kürzeres Zitat 
ausgereicht. Dafür hättest du lieber einen ganzen Satz formulieren 
sollen, statt einfach nur ein einzelnes Wort hinzuwerfen, dessen Sinn 
sich auch aus den 18 zitierten Zeilen davor nicht ergibt.

> Wenn es dich stört, daß die Forensoftware Mitglieder gängelt, dann
> beschwere dich bitte bei der Forensoftware und nicht bei mir.

Ich hab nirgends geschrieben, daß mich das Forum stört oder gängelt. Das 
tut es auch nicht. Ich hab hier bestimmt schon mehrere Hundert Postings 
verfaßt und noch nie ein Problem damit gehabt. Stören tut mich nur die 
Art deines Postings. Genau solche Postings sind letztlich auch der 
Grund, warum im Forum überhaupt solche Regeln eingeführt wurden.

> Ich versuche lediglich Beiträge zu verfassen, die in sich schlüssig
> sind. Mehr nicht.

Darin hast du auf ganzer Linie versagt.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Gut. Ich werde zukündtig besser überdenken, ob ein Beitrag sinnvoll ist.

von alter_falter (Gast)


Lesenswert?

Ich finde es schade, dass in allen Foren (nicht nur hier) alles immer 
gleich ausarten muss und persönlich wird.Ist ja auch so einfach im 
Schutze der Anonymität.

Einerseits beschweren sich die Leute hier so oft, dass man doch endlich 
dass C-Buch lesen soll - vermutlich damit sie nicht soviel Mühe beim 
Antworten haben und im Gegenzug werden unendlich viele Zeilen für 
Banalitäten reingeprügelt.

Sehr schade - wo bleibt die Netiquette?


Armes Internet ...

von Klaus W. (mfgkw)


Lesenswert?

alter_falter schrieb:
> Sehr schade - wo bleibt die Netiquette?

schon mal danach gegoogelt? :-)

von alter_falter (Gast)


Lesenswert?

Ich seh' schon - sie ist jetzt bei Wiki :-)

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.