Idexe Geschrieben 9. Juli 2004 Teilen Geschrieben 9. Juli 2004 Hallo jetzt will ichs genau wissen, wenn ich eine globale Variable in einem Headerfile definiere, dann habe ich ja mehrere Möglichkeiten. extern int i;static int i = 1;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 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Juli 2004 Teilen Geschrieben 9. Juli 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Timon Geschrieben 9. Juli 2004 Teilen Geschrieben 9. Juli 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.