Forzare VS2008 a emettere un avviso GCC simile a "avviso:confronto tra espressioni intere con segno e senza segno”

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

Domanda

Sulla falsariga di quanto descritto in la conversione in "size_t" da "int" può cambiare il segno del risultato: GCC, C, vorrei invece assicurarmi che l'avviso che ricevo in GCC 4.2.1 sia contrassegnato anche in VS2008 SP1 sia nella compilazione a 32 bit che in quella a 64 bit, invece di disabilitare gli avvisi in GCC per adattarlo a VS2008.

Ad esempio, in GCC 4.2.1 in condizioni a 64 bit, vediamo quanto segue come avviso in condizioni -Wall:

#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;
}

L’avvertimento del GCC è:

warning: comparison between signed and unsigned integer expressions

Ma non viene contrassegnato dal compilatore VS2008 SP1 a 64 bit, indipendentemente dai tipi di pragma che provo e indipendentemente da ciò che abilito utilizzando /W3 o /W4 o /w3qualche_numero_avviso o /w4qualche_numero_avviso, eccetera.

Ora, non voglio abbassare i livelli di avviso di GCC o disabilitare l'avviso, dal momento che l'hanno inserito lì per ottime ragioni.Quindi vorrei che le build VS fallissero in modo simile quando /WX è abilitato.È qualcosa con cui devo convivere o c'è qualche avvertimento che potrebbe funzionare su VS2008?

MODIFICARE:L'avviso viene visualizzato per le build a 32 bit ma non per le build a 64 bit, utilizzando lo stesso set di opzioni del compilatore, mostrato di seguito:

/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

MODIFICA N. 1:Visto che questa potrebbe essere un'idiosincrasia di Visual Studio, ho postato su Centro per sviluppatori Visual C++ - avviso C4018:'<':La mancata corrispondenza con segno/senza segno viene emessa per la compilazione a 32 bit ma non a 64 bit in VS2008 SP1 su Windows a 64 bit.

MODIFICA N. 2:Mi è stato chiesto di pubblicare su Microsoft Connect dall'interno del file Pubblicazione del Centro per sviluppatori di Visual C++, e oggi (2011-01-11) Microsoft ha risposto alla mia domanda e lo ha verificato come problema del compilatore:Hanno affermato che il problema verrà aggiunto al backlog per essere risolto in una versione futura: Microsoft Connect - avviso C4018:'<':la mancata corrispondenza con segno/senza segno viene emessa solo tra tipi di dimensioni simili.

È stato utile?

Soluzione 2

Rispondendo alla mia domanda: Vedere la mia EDIT # 2 nella zona domanda iniziale. E 'ormai riconosciuto da Microsoft come un problema di compilatore.

Altri suggerimenti

Qualcosa è andato storto, quella riga di codice dovrebbe e genererà il desiderato "avviso C4018:'<':mancata corrispondenza firmato/non firmato".

Ecco le impostazioni del compilatore del mio progetto di test, se aiutano del tutto:

/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug estproj1.pch " /Fo"Debug\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

MODIFICARE:questo è stato testato con Visual Studio a 32 bit, ma stai chiedendo informazioni sulla compilazione a 64 bit, quindi queste informazioni non sono rilevanti per te, mi scusi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top