2017-10-25 3 views
0

Gibt es eine Möglichkeit, einen Fehler zu verursachen, wenn eine Quelldatei in einem Build mehrfach verarbeitet wird? Ich weiß, dass Sie #pragma once und #ifndef Art von Dingen verwenden können, aber das schützt es nur davor, einmal in einer einzigen Kompilierungseinheit enthalten zu sein. Ich möchte sicherstellen, dass es nur einmal über einen gesamten Build mit mehreren Projekten in einer Lösung in Visual Studio enthalten/kompiliert wird.So stellen Sie sicher, dass eine Datei nur einmal in einem Build verarbeitet wird

Ich verstehe, dass eine normale CPP-Datei nur einmal in der Regel verarbeitet wird. Aber wenn andere Dateien #include d .cpp-Datei, könnte es mehrere Male verarbeitet werden (Ich weiß, das ist nicht typisch, aber es erklärt am besten die Situation). Also versuche ich mich vor versehentlichen mehrfachen Einschlüssen der Datei zu schützen.

+2

_ "Wenn andere Dateien #cpp-Datei enthalten" _ das wäre schrecklich falsch, weil es eine 'cpp' Datei ist. Meinst du eine Headerdatei (z.B. 'hpp')? –

+1

Alternative Lösung: Suchen Sie nach allen Stellen, an denen diese '.cpp' Dateien fehlerhaft enthalten sind, und beheben Sie diese. – user0042

+0

@underscore_d Es ist nicht unbedingt falsch (siehe das Ende dieses Eintrags): https://isocpp.org/wiki/faq/templates#separate-template-fn-defn-from-decl – mentics

Antwort

0

Also, ich versuche, gegen versehentliche mehrfache Einbeziehung der Datei zu schützen.

Zumindest Ihre Linker wird dazu dienen, eine Fehlermeldung über ODR-Regelverletzungen zu werfen, keine Sorge.

Aber wenn andere Dateien, die CPP-Datei #include, könnte es mehrere Male

Ja verarbeitet werden, wird es mehrere Male und bieten mehrere Definitionen verteilt über Übersetzungseinheiten verarbeitet werden, die nicht miteinander verknüpft werden können nicht mehr.

+0

Ich habe es getestet und es ergibt sich kein Fehler. Nun ... das könnte bedeuten, dass ich mich nicht darum kümmern sollte, die Datei mehrmals zu verarbeiten, weil es dem Linker egal ist, aber ich würde es trotzdem gerne wissen. – mentics

+0

@ taotree Vielleicht, stellen Sie eine [MCVE] für welchen Fall der Linker nicht beschweren? – user0042

+0

Beispiel: eine leere Datei. Ich weiß, das ist nicht sinnvoll, aber es ist korrekt. Die Antwort: "Der Linker wird Ihnen sagen, ob es wichtig ist" ist nützlich, aber nicht direkt die Antwort die Frage. Wenn die Antwort lautet: "Nein, du kannst nicht", dann ist das in Ordnung, ich will es nur wissen. – mentics

0

was ist mit der COUNTER Makro? Nicht sicher über das Verhalten über Projekte hinweg

Verwandte Themen