Ich bin neugierig auf Folgendes. Ich habe ein einfaches C-Array in einer Header-Datei wie folgt deklariert:
%Vor%es gibt mir eine Reihe von Warnungen:
%Vor% obwohl ich diese Datei in meine cpp-Dateien einfüge und diese Variable verwende. Die zweite Sache, die ich nicht verstehe ist, wenn ich const
specifier wie folgt hinzufügen:
die Warnungen verschwinden! Kann jemand mir eine Erklärung geben, warum ich diese Warnungen bekomme und warum const
sie entfernt?
Die kurze Antwort lautet: Sie definieren ein Array in einer Kopfzeile und deklarieren es nicht einfach. Das ist nicht gut. Wenn das Array immer zugänglich sein soll, wenn Sie die Kopfzeile einfügen, sollte eine Deklaration in der Kopfzeile vorhanden sein:
%Vor%Und dann, in nur einer Quelldatei, definieren Sie das Array als solches:
%Vor% Zur langen Antwort: Es gibt nichts "Magisches" an einer Header-Datei; Die Direktive #include
kopiert nur den gesamten Inhalt der Header-Datei in Ihre Quelldatei. Also, was Sie bekommen, ist ein neues statisches Array userCardsIndexes
in jeder Quelldatei definiert; Wenn dieses Array nicht verwendet wird, erhalten Sie die Warnung "unused variable". Das Voranstellen der const
unterdrückt wahrscheinlich die Warnung, nur weil der Compiler nicht konfiguriert ist, um auf const
unbenutzte Variablen zu warnen. Zum Beispiel: Verwenden Sie GCC, schauen Sie sich die Dokumentation für "-Wunused-Variable" an:
Statische Variablen sind lokal in der Übersetzungseinheit, in der sie definiert sind. Wenn Sie dies in einer Kopfzeile tun, erhalten Sie eine separate Kopie in jeder cpp-Datei, in die Sie sie einschließen. Wahrscheinlich nicht das, was Sie wollten. Der Compiler bemerkt offensichtlich, dass einige dieser Kopien überhaupt nicht verwendet werden.
Wenn Sie const
hinzufügen, haben Sie eine andere Situation. In C ++ ist ein konstantes Objekt im Dateibereich standardmäßig ebenfalls statisch. Also bedeuten const
und static const
dasselbe.
Das konstante Array wird auch eine Kopie in jeder cpp-Datei haben, aber das ist nicht so wichtig, da es immer den gleichen Wert haben wird.
Tags und Links const c++ header-files static