2016-04-25 12 views
0

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.

+1

#ifndef M #error erwartet M nicht definiert #endif –

Antwort

0

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 
0

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' 
+1

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? –

+0

@JohnBollinger Du hast recht, es wird nicht beim Klängen gleich behandelt, es wird nicht so weit ausgewertet, wie ich sagen kann. – Harry

Verwandte Themen