c ++ static array deklariert in h Datei gibt Warnung 'definiert aber nicht benutzt'

7

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:

%Vor%

die Warnungen verschwinden! Kann jemand mir eine Erklärung geben, warum ich diese Warnungen bekomme und warum const sie entfernt?

    
Andrey Chernukha 27.01.2013, 09:58
quelle

2 Antworten

15

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:

Ссылка

    
sheu 27.01.2013, 10:12
quelle
5

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.

    
Bo Persson 27.01.2013 10:10
quelle

Tags und Links