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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...