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.
Ja, Sie haben Recht, scheint es die Warnung unter 32-Bit-Builds zu zeigen, aber nicht unter 64-Bit-Builds. – bgoodr
Ich habe seitdem die Hauptfrage bearbeitet, um Ihre Ergebnisse einzubeziehen, und die Kompilierungszeilenoptionen aufgeführt, die ich verwendet habe. – bgoodr