
Plätzchen
Gibt es eine Möglichkeit, nur eine einzelne Warnzeile in einer cpp-Datei mit Visual Studio zu deaktivieren?
Wenn ich beispielsweise eine Ausnahme abfange und sie nicht behandle, erhalte ich den Fehler 4101 (nicht referenzierte lokale Variable). Gibt es eine Möglichkeit, dies nur in dieser Funktion zu ignorieren, aber ansonsten in der Kompilierungseinheit zu melden? Im Moment lege ich #pragma warning (disable : 4101)
am Anfang der Datei, aber das schaltet es offensichtlich nur für die gesamte Einheit aus.
#pragma warning( push )
#pragma warning( disable : 4101)
// Your function
#pragma warning( pop )

Daniel Seither
Wenn Sie eine Warnung nur in einer einzigen Codezeile (nach der Vorverarbeitung) unterdrücken möchten[1]du kannst den … benutzen suppress
Warnungsspezifizierer:
#pragma warning(suppress: 4101)
// here goes your single line of code where the warning occurs
Für eine einzelne Codezeile funktioniert dies genauso wie das Schreiben des Folgenden:
#pragma warning(push)
#pragma warning(disable: 4101)
// here goes your code where the warning occurs
#pragma warning(pop)
[1] Andere haben in Kommentaren unten angemerkt, dass, wenn die folgende Anweisung eine #include-Anweisung ist, die #pragma warning(suppress: 4101)-Anweisung die Warnung nicht für jede Zeile in der Header-Datei effektiv unterdrücken würde. Wenn man das beabsichtigen würde, müsste man stattdessen die Push/Disable/Pop-Methode verwenden.
#pragma
Push/Pop sind oft eine Lösung für diese Art von Problemen, aber warum entfernen Sie in diesem Fall nicht einfach die nicht referenzierte Variable?
try
{
// ...
}
catch(const your_exception_type &) // type specified but no variable declared
{
// ...
}

scharfer Zahn
Benutzen #pragma warning ( push )
dann #pragma warning ( disable )
geben Sie dann Ihren Code ein und verwenden Sie ihn #pragma warning ( pop )
wie hier beschrieben:
#pragma warning( push )
#pragma warning( disable : WarningCode)
// code with warning
#pragma warning( pop )

A876
Beispiel:
#pragma warning(suppress:0000) // (suppress one error in the next line)
Dieses Pragma gilt für C++ beginnend mit Visual Studio 2005.
https://msdn.microsoft.com/en-us/library/2c8f766e(v=vs.80).aspx
Das Pragma ist NICHT gültig für C# über Visual Studio 2005 bis Visual Studio 2015.
Fehler: „Deaktivierung oder Wiederherstellung erwartet“.
(Ich schätze, sie sind nie zur Implementierung gekommen suppress
…)
https://msdn.microsoft.com/en-us/library/441722ys(v=vs.140).aspx
C# benötigt ein anderes Format. Das würde so aussehen (funktioniert aber nicht):
#pragma warning suppress 0642 // (suppress one error in the next line)
Anstatt suppress
Sie müssen disable
und enable
:
if (condition)
#pragma warning disable 0642
; // Empty statement HERE provokes Warning: "Possible mistaken empty statement" (CS0642)
#pragma warning restore 0642
else
Das ist so hässlich, ich denke, es ist klüger, es einfach neu zu gestalten:
if (condition)
{
// Do nothing (because blah blah blah).
}
else

orion elenzil
Wie @rampion erwähnt hat, sind die Warnungen, wenn Sie sich in clang gcc befinden, namentlich und nicht nummeriert, und Sie müssen Folgendes tun:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
// ..your code..
#pragma clang diagnostic pop
diese Info stammt von hier
Anstatt es über die Datei (oder sogar eine Header-Datei) zu legen, umschließen Sie einfach den betreffenden Code mit #pragma warning (push)
, #pragma warning (disable)
und ein passendes #pragma warning (pop)
wie gezeigt hier.
Obwohl es einige andere Optionen gibt, einschließlich #pramga warning (once)
.
10133700cookie-checkEinzelner Warnfehler deaktivierenyes
Wenn Sie nur den Typ angeben und die Ausnahme nicht benennen, wird keine Warnung ausgegeben. Z.B
catch (const std::exception& /* unnamed */) {.... }
. Es beantwortet zwar nicht deine Frage, könnte aber dein Problem lösen.– Sjoerd
23. August 2011 um 10:10 Uhr
Google sucht nach “Wie man -Wunused-Ergebnis in C++ unterdrückt” führen Sie hierher, also ist hier die Antwort für nur diesen speziellen Fall: stackoverflow.com/a/63512122/4561887.
– Gabriel Staples
20. August 2020 um 20:13 Uhr