c++ - locally - visual studio warning level




Verwenden Sie#pragma warning push/pop den richtigen Weg, um die Warnstufe vorübergehend zu ändern? (4)

Hin und wieder ist es schwierig, C ++ - Code zu schreiben, der überhaupt keine Warnungen ausgibt. Das Aktivieren von Warnungen ist jedoch eine gute Idee. Daher ist es oft notwendig, Warnungen um ein bestimmtes Konstrukt zu deaktivieren und sie in allen anderen Codeteilen aktivieren zu lassen.

Ich habe bisher zwei Möglichkeiten gesehen, dies zu tun.

Die erste ist die Verwendung von #pragma warning( push ) und #pragma warning( pop ) :

 #pragma warning( push )
 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( pop )

Die zweite #pragma warning( default ) ist die Verwendung von #pragma warning( default ) :

 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( default: ThatWarning )

Das Problem, das ich in der zweiten Variante sehe, ist, dass es die ursprüngliche Warnstufe verwirft - die Warnung war möglicherweise vorher ausgeschaltet oder die Warnstufe wurde möglicherweise geändert. Mit der default würden diese Änderungen verworfen.

Der erste Ansatz sieht sauber aus. Gibt es irgendwelche Probleme damit? Gibt es bessere Möglichkeiten, dasselbe zu erreichen?


Der richtige Ansatz (obwohl ein bisschen hässlich)

#ifdef _MSC_VER
 #pragma warning( push )
 #pragma warning( once: ThatWarning )
#endif
 //code with ThatWarning here
#ifdef _MSC_VER
 #pragma warning( pop )
#endif

Die erste Methode ist der beste Weg, IMO. Ich kenne keine Probleme damit.

Bedenken Sie, dass ein #pragma compilerspezifisch ist, also erwarten Sie nicht, dass es auf jedem Compiler da draußen funktioniert :)


Es ist zu spät für einen spitzen Zahn, aber für alle Googler da draußen:

#pragma warning ( suppress: ThatWarning )
// one single line with ThatWarning

ist kurz (in der Regel seit VS 2008 , aber in VS 2005 nur für Code Analyzer-Warnungen):

#pragma warning ( push )
#pragma warning ( disable: ThatWarning )
// one single line with ThatWarning
#pragma warning ( pop )

Ich habe keine Probleme mit der ersten Variante. Vielleicht ist der bessere Weg, das folgende zu verwenden:

 #pragma warning( push )
 #pragma warning( once: ThatWarning )
 //code with ThatWarning here
 #pragma warning( pop )

Dadurch werden Sie wissen, dass im Code immer noch Warnungen vorhanden sind, aber die Warnmeldungen sind nicht so störend. Aber das ist Geschmackssache.





pragma