Erzwingen VS2008 eine GCC Warnung ähnlich wie zur Ausgabe von „Warnung: Vergleich zwischen mit und ohne Vorzeichen Integer-Ausdrücke“

StackOverflow https://stackoverflow.com/questions/4404007

Frage

In der gleichen Richtung, was in Umstellung auf ‚size_t‘ beschrieben wurde von ‚int‘ kann das Vorzeichen des Ergebnisses ändern - GCC, C , würde ich stattdessen wie um sicherzustellen, dass die Warnung, die ich unter GCC erhalte 4.2.1 auch unter VS2008 SP1 sowohl unter 32-Bit- und 64-Bit-Kompilierung gekennzeichnet ist, im Vergleich zu Warnungen unter GCC Anzug VS2008 zu deaktivieren.

Zum Beispiel unter GCC 4.2.1 unter 64-Bit-Bedingungen sehen wir die folgende als Warnung unter -Wall Bedingungen:

#include <string.h>
bool foo()
{
    size_t len = 0;
    const char * someBuffer = "flubber";
    len = strlen(someBuffer);
    bool retval = false;
    for (int j = 0; j < len; j++) // <-- warning
    {
        if (someBuffer[j] != '0')
        {
            retval = true;
            break;
        }
    }
    return retval;
}

Die GCC Warnung:

warning: comparison between signed and unsigned integer expressions

Aber es ist nicht von den VS2008 SP1 64-Bit-Compiler, egal, welche Art von Pragmas ich versuche, markiert und egal, was ich ermögliche mit / W3 oder / W4 oder / w3 some_warning_number oder / w4 some_warning_number , etc.

Nun, ich will nicht zu verdummen GCCs Warnstufen oder die Warnung deaktivieren, da sie für sehr gute Gründe, die Warnung in dort hatten. Also habe ich der VS möchte baut auf ähnliche Weise zum Scheitern verurteilt, wenn / WX aktiviert ist. Ist das etwas, was ich mit leben müssen, oder gibt es eine Warnung, dass der Trick auf VS2008 tun würde?

EDIT: Die Warnung zeigt sich für 32-Bit-Builds, aber nicht mit 64-Bit-Builds, den gleichen Satz von Compiler-Optionen verwenden, wie folgt dar:

/O2
/Ob2
/D "WIN32"
/D "_WINDOWS"
/D "NDEBUG"
/D "_CRT_SECURE_NO_WARNINGS"
/D "__WIN32__"
/D "_SCL_SECURE_NO_WARNINGS"
/D "_BIND_TO_CURRENT_MFC_VERSION"
/D "_BIND_TO_CURRENT_CRT_VERSION"
/D "WINVER=0x0502"
/D "_WIN32_WINNT=0x0502"
/D "_WIN32"
/D "_NT"
/D "_CRT_NONSTDC_NO_WARNINGS"
/D "_MBCS"
/FD
/EHsc
/MD
/W3
/WX
/TP
/Zm1000

EDIT # 1: da dies sehen könnte ein Visual Studio Idiosynkrasie, ich gepostet Visual C ++ Developer Center - Warnung C4018: '<': mit / ohne Vorzeichen Mismatch emittiert wird für 32-Bit, aber nicht 64-Bit-Kompilierung unter VS2008 SP1 auf 64-Bit-Windows .

EDIT # 2: Ich war auf Microsoft Connect schreiben gerichtet innerhalb der Visual C ++ Developer Center Entsendung , und heute (2011-01-11) Microsoft auf meine Frage geantwortet und es als Compiler Ausgabe überprüft: sie stellten fest, dass das Problem wird hinzugefügt, um den Rückstand in einer zukünftigen Version behoben werden: Microsoft Connect - Warnung C4018:. '<': mit / ohne Vorzeichen Mismatch nur zwischen gleichgroßen Typen

War es hilfreich?

Lösung 2

meine eigene Frage zu beantworten: mein EDIT # 2 in der ursprünglichen Frage Bereich sehen. Es ist nun von Microsoft als Compiler Problem erkannt.

Andere Tipps

Es ist etwas schief gelaufen, dass Codezeile soll und wird die gewünschte „Warnung C4018:‚<‘: mit / ohne Vorzeichen mismatch“ erzeugen.

Hier ist mein Testprojekt Compiler-Einstellungen, wenn diese Hilfe überhaupt:

/ Od / D "WIN32" / D "_DEBUG" / D "_CONSOLE" / D "_UNICODE" / D "UNICODE" / Gm / EHsc / RTC1 / MDd /Yu"stdafx.h "/ F p" Debug \ testproj1.pch "/ Fo "Debug \" /Fd"Debug\vc90.pdb" / W3 / nologo / c / ZI / TP / Errorreport: Prompt

EDIT:. Diese geprüft, wie mit 32-Bit-Visual Studio, aber Sie fragen über 64-Bit-Kompilierung, so dass diese Informationen nicht für Sie relevant sind, meine Begnadigung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top