Hallo,
Zu "static storage" sagt der Standard in § 6.2.4, Seite 32:
| An object whose identifier is declared with external or internal linkage,
| or with the storage-class specifier static has static storage duration. Its
| lifetime is the entire execution of the program and its stored value is
| initialized only once, prior to program startup.
Das heißt: Eine Funktion, die
return "foo";
oderchar *p = "foo"; return foo;
macht, wird nach dem C-Standard immer funktionieren und niemals Probleme machen.
ja, ich habe etwas verwechselt. Nämlich dass manche Compiler per Option die Auswahl bieten, konstante Daten (also Initialisierungswerte) wahlweise im Datensegment oder im Codesegment zu speichern.
Zudem: Es wäre für den Compiler ziemlich unsinnig, bei char *p = "foo" extra noch Code zu generieren (!), der den Inhalt von "foo" extra auf dem Stack abglegt - müsste bei jedem Betreten der Funktion ja geschehen.
Ja, stimmt. :-)
Ciao,
Martin
Einer aktuellen Erhebung zufolge sind zehn von neun Ehefrauen eifersüchtig auf ihren Mann.