Warum muss ein const extern sein, damit man es auch außerhalb nutzen kann, eine "normale" Variable aber nicht?
-
// source.cpp extern const int c = 5; int v = 5;// source.h extern const int c; extern int v;Bei der Header-Datei ist mir das klar, aber warum muss ich bei einer Konstanten (nur bei einer Konstanten) diese in der cpp-Datei als extern deklarieren, um sie woanders benutzen zu können? Es hat wahrscheinlich damit etwas zu tun, dass extern nur einmal definiert werden darf, aber irgendwie kann ich mir daraus immer noch keinen Reim machen.
Wäre dankbar für Antworten!
-
Const ist in C++ so definiert.
-
Inkludiert
source.cppsource.h?
-
manni66 schrieb:
Const ist in C++ so definiert.
Warum denn nur bei einer Konstanten? Soweit ich weiß, heißt extern lediglich "wird woanders definiert". Allerdings definiere ich die Variable in der cpp-Datei.
Furble Wurble schrieb:
Inkludiert
source.cppsource.h?Nein.
-
Was soll das Geplapper? Es ist so definiert. Wenn es dir nicht passt nimm eine andere Sprache.
-
non schrieb:
Furble Wurble schrieb:
Inkludiert
source.cppsource.h?Nein.
Hab die Frage falsch verstanden.
Ich wollte darauf hinaus, dass das Schlüsselwortexternin der Definition redundant ist, wenn eine Deklaration mitexterninkludiert ist.
-
manni66 schrieb:
Was soll das Geplapper? Es ist so definiert. Wenn es dir nicht passt nimm eine andere Sprache.
Im Gegensatz zu dir lerne ich die Sprache eben anständig. Das ist nicht "einfach so definiert" sondern const ist standardmäßig static und hat somit internal linkage. Das extern Keyword macht zwei Sachen: external linkage und falls globale Variable ist diese nicht mit einer Standardvariablen definiert. Wenn ich das extern nicht hinzufüge, dann hat die Konstante internal linkage und ist außerhalb der translation unit nicht sichtbar. Habe die Antwort nach einigem Suchen auf Stackoverflow dann doch gefunden. ...
-
Furble Wurble schrieb:
non schrieb:
Furble Wurble schrieb:
Inkludiert
source.cppsource.h?Nein.
Hab die Frage falsch verstanden.
Ich wollte darauf hinaus, dass das Schlüsselwortexternin der Definition redundant ist, wenn eine Deklaration mitexterninkludiert ist.Hast Recht, damit wäre es auch rückwärtskompatibel zu C.