Obligar a VS2008 a emitir una advertencia de GCC similar a “advertencia:comparación entre expresiones enteras con y sin signo”

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

Pregunta

En la misma línea de lo descrito en la conversión a 'size_t' desde 'int' puede cambiar el signo del resultado - GCC, C, en su lugar, me gustaría asegurarme de que la advertencia que recibo en GCC 4.2.1 también esté marcada en VS2008 SP1 en la compilación de 32 y 64 bits, en lugar de deshabilitar las advertencias en GCC para adaptarlas a VS2008.

Por ejemplo, en GCC 4.2.1 en condiciones de 64 bits, vemos lo siguiente como advertencia en condiciones -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;
}

La advertencia del CCG es:

warning: comparison between signed and unsigned integer expressions

Pero no está marcado por el compilador VS2008 SP1 de 64 bits, sin importar qué tipos de pragmas intente y sin importar lo que habilite usando /W3 o /W4 o /w3.algún_número_de_advertencia o /w4algún_número_de_advertencia, etc.

Ahora, no quiero simplificar los niveles de advertencia de GCC ni desactivar la advertencia, ya que tenían la advertencia allí por muy buenas razones.Por lo tanto, me gustaría que las compilaciones de VS fallen de manera similar cuando /WX está habilitado.¿Es esto algo con lo que tengo que vivir o hay alguna advertencia que funcione en VS2008?

EDITAR:La advertencia aparece para compilaciones de 32 bits pero no para compilaciones de 64 bits, utilizando el mismo conjunto de opciones del compilador, que se muestra a continuación:

/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

EDITAR #1:Dado que esto podría ser una idiosincrasia de Visual Studio, publiqué en Centro de desarrolladores de Visual C++: advertencia C4018:'<':Se emite una discrepancia firmada/sin firmar para la compilación de 32 bits pero no de 64 bits en VS2008 SP1 en Windows de 64 bits.

EDITAR #2:Se me indicó que publicara en Microsoft Connect desde dentro del Publicación en el Centro de desarrolladores de Visual C++, y hoy (11/01/2011) Microsoft respondió a mi pregunta y la verificó como un problema del compilador:Afirmaron que el problema se agregará al trabajo pendiente y se solucionará en una versión futura: Microsoft Connect - advertencia C4018:'<':La falta de coincidencia firmada/sin firmar solo se emite entre tipos de tamaño similar.

¿Fue útil?

Solución 2

contestar a mi propia pregunta: Ver mi edición # 2 en el área pregunta original. Ahora se reconoce por Microsoft como un problema de compilador.

Otros consejos

Algo salió mal, esa línea de código debería generar y generará la "advertencia C4018" deseada:'<':discrepancia firmada/no firmada".

Aquí está la configuración del compilador de mi proyecto de prueba, si es que ayuda en algo:

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

EDITAR:Esto se probó con Visual Studio de 32 bits, pero estás preguntando sobre la compilación de 64 bits, por lo que esta información no es relevante para ti, perdón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top