PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Frage - static in Funktion


mekakic
2010-05-11, 11:05:43
Wenn ich in C eine Funktion hab und in diesem Scope eine Speicherbereich anlege, kann ich dann diesen Speicher "veröffentlichen" und die Pointer rausreichen ohne eine globale Variable anlegen zu müssen?


char * test()
{
static char buffer[BUFF_SIZE];

return buffer;
}

Neomi
2010-05-11, 11:59:02
Ja, das geht. Das ist nichts anderes als eine globale Variable, die nur im globalen Namespace nicht sichtbar ist.

mk Gast
2010-05-11, 12:01:59
Ja das geht:

One more advantage of static variables is that, since they are created once and then exist for the life of the program, the address of the variable can be passed to modules and functions that aren't in the same C file for them to access the variable's contents.
http://wiki.answers.com/Q/What_does_static_variable_mean


Schön ist das aber irgendwie nicht. Mit static erzeugst du ja eine Variable mit eingeschränktem Gültigkeitsbereich, nur um das dann wieder aufzuweichen.

Gast
2010-05-11, 12:05:23
Anmerkung:

Ohne das static geht das natprlich nicht, da der Zeiger nach Beenden der Funktion sonst auf einen ungültigen Speicherbereich zeigt. Das heißt, es geht natürlich schon...


...wie so viele Dinge in c/c++ will man das aber trotzdem nicht.

Gnafoo
2010-05-11, 12:17:28
Das ist übrigens ein Trick, den man nutzen kann, um die nicht definierte statische Initialisierungsreihenfolge in C zu umgehen:


Foo& GetFoo()
{
static Foo foo;
return foo;
}

// Foo foo;
Bar bar(GetFoo());


Wenn Foo eine einfache Variable wie bar wäre, könnte man nicht garantieren, dass sie vor dem Aufruf des Bar-Konstruktors initialisiert wäre (zumindest nicht, wenn mehrere Übersetzungseinheiten ins Spiel kommen). Mit der Funktion klappt es.

Kann man auch irgendwo in Effective C++ nachlesen.