Wie im Buch Die C ++ Programmiersprache (Bjarne Stroustrup), in Abschnitt 15.2.3 (Die Eine Definitionsregel) Seite Nr. 425, schreibe ich Programm wie folgt:
file1.cpp
%Vor%file2.cpp
%Vor%Zum Kompilieren habe ich den folgenden Befehl versucht.
%Vor%und
%Vor%Beide Befehle erzeugen eine ausführbare Datei ohne Fehler oder Warnung. Aber laut Buch sollte dieses Beispiel einen Fehler geben.
Eine Definitionsregel sagt das :
wenn eine .cpp-Datei
struct S { int x; };
und die andere .cpp-Datei definiert Datei definiertstruct S { int y; };
, das Verhalten des Programms, das verbindet sie miteinander ist undefined .
Ihr Programm ruft also undefiniertes Verhalten (UB) auf. Daher ist der Compiler nicht erforderlich, um eine Diagnose dafür zu geben.
Wenn Sie den Grund dafür wissen wollen, lesen Sie dies .
Ich hoffe, es hilft. :)
Tags und Links c++ c++11 undefined-behavior one-definition-rule