Visual Studio 2010 (C++): unterdrücken, C4706 Warnung vorübergehend
Beim kompilieren die folgende C++ - Quelldatei in Visual Studio 2010 mit warning level /W4 aktiviert
#include <cstdio> //for printf
#include <cstring> //for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
if (result = strcmp(str0, str1)) //line 11
{
printf("Strings are different\n");
}
}
erhalten Sie die folgende Warnung
Warnung C4706: Zuordnung innerhalb der bedingte Ausdruck
für die Linie 11.
Will ich um diese Warnung zu unterdrücken, genau an dieser Stelle. Also bemühte ich Google und fand diese Seite: http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx
Also änderte ich den code, um das folgende - in der Hoffnung dies würde das problem lösen:
#include <cstdio> //for printf
#include <cstring> //for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
#pragma warning(push)
#pragma warning(disable : 4706)
if (result = strcmp(str0, str1))
#pragma warning(pop)
{
printf("Strings are different\n");
}
}
Es hat nicht geholfen.
Diese Variante hat auch nicht geholfen:
#include <cstdio> //for printf
#include <cstring> //for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
#pragma warning(push)
#pragma warning(disable : 4706)
if (result = strcmp(str0, str1))
{
#pragma warning(pop)
printf("Strings are different\n");
}
}
Zu vermeiden, eine weitere Anfrage: ich reinigte die Lösung vor jeder Zusammenstellung. Also ist das wohl nicht der Fehler.
So zum Schluss: wie unterdrücke ich die C4706 genau an diesem Ort?
Bearbeiten ja, das umschreiben ist möglich - aber ich möchte wirklich wissen, warum Sie die Weise, die ich versuche zu unterdrücken der Warnung (dokumentiert ist, offiziell auf der MSDN-Website) funktioniert nicht - wo ist der Fehler???
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der MSDN-Library: http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx, Es ist der Abschnitt wie folgt.
Also '#pragma warning " funktioniert nur für jede Funktion/Methode.
Bitte sehen Sie sich den folgenden code für mehr detail.
Anstatt zu versuchen, verstecken Sie Ihre Warnung, beheben das Problem ist es, Klagen über; Ihre Zuweisung hat einen Wert (der Wert auf der linken Seite der Zuweisung), die rechtlich verwendet, die in einem anderen Ausdruck.
Können Sie dieses Problem beheben, indem Sie explizit die Prüfung das Ergebnis der Zuordnung:
Die vernünftige Lösung ist, zu schreiben, die Bedingung zu
informiert werden, die alle C-compiler, die Sie wirklich wollen, zu ordnen, und fast sicher erzeugen die gleiche Objekt-code.
Gibt es eine andere Lösung vermeidet die Warnung: die Komma-operator.
Der Hauptvorteil wird sein, dass Sie nicht brauchen, Klammern also es ist ein bisschen kürzer als die
!=0
Lösung, wenn die variable name ist kurz.Beispiel:
Es ist eine einfache Konstruktion
!!
cast von einem Typ zubool
. Wie diese:Jedoch in einigen Fällen den direkten Vergleich
!= 0
könnte klarer sein, um Leser.