Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo jetzt will ichs genau wissen,

wenn ich eine globale Variable in einem Headerfile definiere, dann habe ich ja mehrere Möglichkeiten.

  1. extern int i;
  2. static int i = 1;
  3. int i;

Wo ist jetzt der Unterschied?

Manchmal muss ich im cpp file nochmal int i = ??; schreiben manchmal nicht.

Wird die Variable dann auf dem Heap oder Stack angelegt ?

Geschrieben

Mit extern sagst du dem Compiler, dass die Variable in irgendeiner Übersetzungseinheit (.c/.cpp-Datei) definiert wird. Darum muss auch in genau einer .cpp-Datei dieselbe Variable ohne extern stehen.

Mit static hast du getrennte Variablen für jede Übersetzungseinheit, also mehrere i, die nichts miteinander zu tun haben.

Wenn du weder extern noch static benutzt, hast du ein globales i definiert. Wenn diese Definition aber dann in mehr als einer Übersetzungseinheit auftaucht, wird sich der Linker über mehrfach definierte Symbole beschweren.

Die Variable wird weder auf dem Stack noch auf dem Heap/Free Store angelegt, sondern im Speicherbereich für statische und globale Variablen.

Geschrieben
Hallo jetzt will ichs genau wissen,

wenn ich eine globale Variable in einem Headerfile definiere, dann habe ich ja mehrere Möglichkeiten.

...

Wird die Variable dann auf dem Heap oder Stack angelegt ?

1. Headerfiles werden vom Compiler (genauer von seinem Preprozessor) vor dem eigentlichen Übersetzen mit dem C-Modul in dem sie inkludiert sind zusammengeführt. Das heisst, es ist nicht relevant, ob eine Anweisung in einem Headerfile oder im Hauptmodul selbst steht.

2. Die Speichertypen/Orte an denen Variablen abgelegt werden, sind "implementation-defined", also vom Compiler bzw. der Zielarchitekur abhängig. Generell werden Stack-Variablen aber nur fuer automatische/lokale Variablen verwendet. Variablen aus einem "Heap" sind wohl eher dynamischer Natur. Da aber globale und statische Variablen immer existieren weisst man Ihnen normalerweise ein festes Plaetzchen im Datenspeicher zu.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...