Wie bekomme ich GCC oder Clang, um mich über den Fehler unten zu warnen, wo M
in Linie 2 N
sein sollte?Warnung über falsche Verpackung Pragma
Auch mit -Wall -Wextra -Wunknown-pragmas
gibt keiner dieser Compiler irgendeine Art von Warnung aus.
Wie bekomme ich GCC oder Clang, um mich über den Fehler unten zu warnen, wo M
in Linie 2 N
sein sollte?Warnung über falsche Verpackung Pragma
Auch mit -Wall -Wextra -Wunknown-pragmas
gibt keiner dieser Compiler irgendeine Art von Warnung aus.
Der Compiler kann Ihre Absichten nur kennen, wenn der Code gültig ist. Sie können mit diesem
#ifndef M
#error M not defined
#endif
auf sich selbst prüfen Oder wenn M
wurde separat definiert von N
mit diesem
#if M != N
#error M is not N
#endif
Wenn Sie am Ausgang des Vorprozessors sehen das Pragma nicht dh ausgewertet, wenn Sie hinzufügen N
erhalten Sie keine 4
, nachdem der Präprozessor fertig ist.
Ich glaube nicht, dass Sie es hier warnen können, zumindest nicht leicht, vielleicht könnte ein Präprozessor-Assistent es herausfinden. Die folgende Warnung hilft nur, wenn sie in einem nicht definierten Wert in einer #if
-Anweisung ist.
-Wundef
Wenn Sie versuchen, etwas zu Pragma dh
#pragma pack(push, (M + 0))
Sie eine Warnung hinzufügen, da der Pragma eine ganze Zahl oder Kennung dh
warning: expected integer or identifier in '#pragma pack'
Sie scheinen davon auszugehen, dass der 'M' Bezeichner in einem' # pragma' genauso gehandhabt wird wie in einem '#i fdef-Richtlinie. Obwohl das plausibel erscheint, überlässt es der Standard, soweit ich es beurteilen kann, vollständig der Implementierung. Haben Sie GCC- oder Clang-Dokumente, die Ihre Schlussfolgerung unterstützen? –
@JohnBollinger Du hast recht, es wird nicht beim Klängen gleich behandelt, es wird nicht so weit ausgewertet, wie ich sagen kann. – Harry
#ifndef M #error erwartet M nicht definiert #endif –