2010-12-09 5 views
4

Entlang der gleichen Weise wie in conversion to ‘size_t’ from ‘int’ may change the sign of the result - GCC , C beschrieben, möchte ich stattdessen versichern, dass die Warnung ich unter GCC 4.2 erhalte. 1 wird auch unter VS2008 SP1 sowohl unter 32-Bit- als auch unter 64-Bit-Kompilierung gekennzeichnet, während Warnungen unter GCC für VS2008 deaktiviert werden.Forcing VS2008, um eine GCC-Warnung ähnlich wie "Warnung: Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Integerausdrücken"

Zum Beispiel unter GCC 4.2.1 unter 64-Bit-Bedingungen sehen wir die folgenden 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 wird nicht durch den VS2008 SP1 64-Bit Compiler markiert, egal welche Arten von Pragmas ich versuche und egal was ich aktiviere mit/W3 oder/W4, oder/w3 some_warning_number oder/w4 some_warning_number, etc.

Nun möchte ich nicht die Warnstufen des GCC dämpfen oder die Warnung deaktivieren, da sie die Warnung aus sehr guten Gründen hatten. Daher möchte ich, dass die VS-Builds auf ähnliche Weise fehlschlagen, wenn/WX aktiviert ist. Ist das etwas, mit dem ich leben muss, oder gibt es eine Warnung, die VS2008 tricksen könnte?

EDIT: Die Warnung erscheint für 32-Bit baut aber nicht mit 64-Bit-Builds, den gleichen Satz von Compiler-Optionen verwenden, wie unten gezeigt:

/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 sein könnte Eine Visual Studio-Idiosynkrasie, die ich auf Visual C++ Developer Center - warning C4018: '<' : signed/unsigned mismatch is emitted for 32-bit but not 64-bit compilation under VS2008 SP1 on 64-bit Windows veröffentlicht habe.

EDIT # 2: Ich wurde aufgefordert, Microsoft Connect von innerhalb der Visual C++ Developer Center posting, und heute (2011-01-11) Microsoft antwortete auf meine Frage und verifizierte es als Compiler-Problem: Sie sagten, dass das Problem hinzugefügt wird auf das in einer zukünftigen Version zu reparierende Rückstand: Microsoft Connect - warning C4018: '<' : signed/unsigned mismatch is only emitted between like-sized types.

Antwort

0

Beantworten meiner eigenen Frage: Siehe meine EDIT # 2 im ursprünglichen Fragebereich. Es wird jetzt von Microsoft als Compiler-Problem erkannt.

1

Irgendetwas ist schiefgelaufen, diese Codezeile sollte und wird die gewünschte "Warnung C4018: '<': signed/unsigned mismatch" generieren.

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 "/Fp"Debug\testproj1.pch"/Fo "Debug" /Fd"Debug\vc90.pdb "/ W3/nologo/c/ZI/TP/Fehlerbericht: prompt

EDIT: dies wie mit 32-Bit-Visual Studio getestet, aber Sie fragen über 64-Bit-Compile, so dass diese Informationen für Sie nicht relevant ist, meine Verzeihung.

+0

Ja, Sie haben Recht, scheint es die Warnung unter 32-Bit-Builds zu zeigen, aber nicht unter 64-Bit-Builds. – bgoodr

+0

Ich habe seitdem die Hauptfrage bearbeitet, um Ihre Ergebnisse einzubeziehen, und die Kompilierungszeilenoptionen aufgeführt, die ich verwendet habe. – bgoodr

Verwandte Themen