2017-01-07 1 views
0

Ich habe die folgenden drei aufeinander folgenden Warnungen:Visual C++ Pragma Warnung

Warning C4068 unknown pragma ...\microsoft visual studio 14.0\vc\include\comutil.h 53 
... 54 
... 54 

Die damit verbundenen Linien sind:

#pragma warning(push) 
#pragma warning(disable: 4290) 
#pragma warning(disable: 4310) 

Die Plattform Toolset ist die übliche v140 und die Zielplattform-Version ist 8.1. Die Warnstufe ist W3.

Ich lese die aktuelle # Pragma Warnung Dokumentation.

Wie ich verstehe, speichert die erste Zeile den aktuellen Zustand der Warneinstellungen.
Die folgenden zwei Zeilen deaktivieren die Warnungen 4290 4310 für den vorausgehenden Code, bis ein #pragma warning(pop) den zuvor gespeicherten Status wiederherstellt.

Warum erscheint #pragma warning als unbekannt?

+0

@HansPassant: Richtig du bist! Ein GNU-Projekt, das nicht davon ausgeht, dass es eine "#pragma warning" geben könnte, definiert ein "warning" -Makro, das mit dem Präprozessor in Konflikt steht. Wenn Sie Ihren Kommentar zur Antwort machen, kann ich den Thread schließen, und eine Codierungsstrategie von einem Experten für diese Art von Problemen wäre ebenfalls willkommen. – antonio

+0

Sicher können Sie die Antwort jetzt selbst schreiben, dass Sie den Grund kennen? Du brauchst meine Hilfe nicht mehr. Markieren Sie den Kommentar einfach als [veraltet]. –

Antwort

0

auf der Eigenschaftenseite des Projektes I

C/C++ -> Preprocess to a file -> Yes (/P) 

ich das Projekt neu erstellt, das eine Debug dir mit einer *.i-Datei für jede C++ Datei erstellt, die alle Makros erweitert (siehe here).
Die Dateien sind sehr groß, aber sie enthalten auch nützliche #line Direktiven, die zeigen, wenn der Compiler auf eine Header-Datei zugreift und diese verlässt. Also ich grepped für den Namen der Header-Datei Anhebung des Fehlers und ich konnte erkennen, dass die warning in #pragma warning(push) wurde auch erweitert, die die nicht gefunden Warnung verursacht.

Da ich eine Anzahl von Kopfzeilen von einem GNU-Projekt eines Drittanbieters eingefügt hatte (wo dieser Typ von #pragma nicht definiert ist), war es relativ einfach, das Makro zu finden, das die Compilerwarnung anhebt.

Verwandte Themen