Verständnisproblem::Unterschied Speicherklasse extern und static
-
Nabend,
ich bin absoluter C-Neuling, bzw eben Perlumsteiger.So, ich bin gerade bei dem Thema Speicherklassen, und ich verstehe einfach den Unterschied zwischen extern und static nicht.
Also beide speichern den Inhalt einer mit der jeweilig mit der Speicherklasse deklarierten Variable auch über den nächsten Anweisungsblock hinaus ab, richtig?
Oder habe ich da was falsch verstanden?
Danke im Voraus
Greetz
Thundersystem
-
Hi,
ich versuch hier mal ein kleines Bspl. zu erstellen:
/* blub.c */ int g_iCount; static int gs_iZaehler; int GetZaehler(void) { return gs_iZaehler; } /* in dieser Unit koennen beide Variablen benutzt werden */ /* main.c */ int GetZaehler(void); extern int g_iCount; /* --> muss extern sein da sonst nicht bekannt */ extern int gs_iZaehler; /* --> fuehrt zu einem fehler da sie static ist */ int main(int argc, char** argv) { printf("g_iCount: %i\n", g_iCount); printf("gs_iZaehler: %i\n", gs_iZaehler); /* --> geht au ned da die Variable nur in blub.c vorhanden ist */ printf("Func getZaehler: %i\n", GetZaehler()); return 0; }
Peace & Blessed Love C0de4Fun
-
Nennt denn der Standard extern überhaupt eine Speicherklasse?
-
Thundersystem schrieb:
So, ich bin gerade bei dem Thema Speicherklassen, und ich verstehe einfach den Unterschied zwischen extern und static nicht.
'extern' sagt dem compiler/linker einfach, dass die variable oder funktion in einer anderen C-datei, in einer library, oder sonstwo steckt.
'static' nagelt bezeichner auf eine C-datei fest. damit hast du sowas wie kapselung d.h. die funktion/variable wird nicht exportiert (der linker findet sie nicht, wenn du von aussen darauf zugreifen willst), mit allen konsequenzen z.b. kannst du mehrere funktionen gleichen namens in mehreren dateien haben usw.
'static' vor lokalen variablen sorgt dafür, dass die variablen auch nach dem verlassen der funktion ihren zustand behalten.
-
Achso, ok ich habs etz begriffn', danke für eure Hilfe!
Greetz
Thundersystem