Im MSDN ( Ссылка ) sehe ich Folgendes:
Alle Anweisungen zur bedingten Kompilierung, z. B. #if und #ifdef, müssen mit dem Schließen von #endif-Anweisungen vor dem Ende der Datei übereinstimmen; Andernfalls wird eine Fehlermeldung generiert. Bei der bedingten Kompilierung Direktiven sind in Include-Dateien enthalten, sie müssen dasselbe erfüllen Bedingungen: Es darf keine nicht übereinstimmende bedingte Kompilierung geben Anweisungen am Ende der Include-Datei.
Nun, einfach und klar. Zur gleichen Zeit kann ich sowas im C ++ 11 Standard nicht finden. Meine Frage ist diese rechtliche Beschränkung?
Ich verstehe völlig, dass das Aufteilen der bedingten Kompilierung über mehrere #include
-Schichten keine gute Idee ist und vermieden werden sollte.
Weiß jemand, wie andere Compiler (GCC, CLANG) diesen Fall behandeln? Vielleicht wurde das irgendwo diskutiert?
und hashif.h
enthalten das:
dann gibt clang ++ einen Fehler.
%Vor% Bearbeiten: Und g++
und cpp
verhalten sich alle gleich.
Genaue Ausgabe von:
%Vor%Tags und Links c++ language-lawyer c-preprocessor