Statische const-Variablendeklaration in einer Header-Datei

8

Wenn ich eine statische const-Variable in der Header-Datei wie folgt deklariere:

%Vor%

und fügen Sie diesen Header dann in mehr als ein .c Dateien ein, wird der Compiler eine neue Instanz für jede Datei erstellen oder ist "intelligent" genug um zu sehen, dass const ist und nur eine Instanz für alle Dateien erstellt?

Ich weiß, ich kann es extern machen und es in einer der .c -Dateien definieren, die diesen Header enthalten, aber das versuche ich nicht zu tun.

    
Michał 12.08.2016, 07:18
quelle

3 Antworten

9

Ich beantwortete dies ausführlich hier . Diese Antwort ist für C ++, aber es gilt auch für C.

Die Übersetzungseinheit ist die individuelle Quelldatei. Jede Übersetzungseinheit einschließlich Ihrer Kopfzeile "sieht" ein static const int . Der static bedeutet in diesem Zusammenhang, dass der Umfang von my_variable auf die Übersetzungseinheit beschränkt ist. Sie erhalten also ein separates my_variable für jede Übersetzungseinheit (" .c file").

Der Compiler wäre nicht "schlau", nur eine Instanz für alle Dateien zu erstellen, er wäre fehlerhaft , weil Sie ausdrücklich dazu aufgefordert haben, dies nicht zu tun ( static ).

    
DevSolar 12.08.2016, 07:26
quelle
3

Wenn Sie die Adresse dieses Objekts verwenden, erstellt der Compiler sicher eine Instanz pro Übersetzungseinheit. Wenn Sie nur Wert verwenden - es ist wahrscheinlich schlau genug, um das Erstellen von Objekten überhaupt zu vermeiden - wird der Wert inline eingefügt, wo es nötig ist.

    
Sergio 12.08.2016 07:24
quelle
-1

Ich denke, es wird nur eine Instanz für alle Dateien geben. Aber Sie können es überprüfen, indem Sie es in verschiedenen Dateien aufrufen und seinen Wert überprüfen

    
shaifali Gupta 12.08.2016 07:22
quelle

Tags und Links