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.
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
).
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.
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
Tags und Links compilation c header-files