Cuando intento compilar el siguiente programa C++ utilizando el compilador de Visual Studio 2010 C++ (X86) con nivel de advertencia/W4 habilitado, recibo una advertencia de falta de coincidencia línea marcadaC++: falta de coincidencia firmado/no firmado cuando solo se usan tipos sin firmar
#include <cstdio>
#include <cstdint>
#include <cstddef>
int main(int argc, char **argv)
{
size_t idx = 42;
uint8_t bytesCount = 20;
// warning C4389: '==' : signed/unsigned mismatch
if (bytesCount + 1 == idx)
{
printf("Hello World\n");
}
// no warning
if (bytesCount == idx)
{
printf("Hello World\n");
}
}
Esto me confunde, ya que solo estoy usando tipos sin firmar. Dado que la comparación
bytesCount == idx
hace que tal advertencia, es probable que tenga que ver con un poco de conversación implícita extraño que sucede aquí.
Por lo tanto, ¿cuál es el motivo por el que recibo esta advertencia y por qué reglas sucede esta conversación (si este es el motivo)?
Y cómo decirle al compilador que no me advierta sobre ese problema, si está claro desde el código del programa que la comparación es segura, pero no quiero deshabilitar las advertencias para todo el archivo, y no quiero hacer código feo para evitarlo ¿Existe alguna forma de lograr eso? – Arkady
@Arkady Si el compilador está configurado para advertir sobre el código, no desea cambiar el código (porque será más feo), y no desea cambiar la configuración del compilador (porque suprimirá la información útil) advertencias también), no dejará muchas opciones abiertas. La única opción que puedo pensar que aún no descartó es piratear el compilador para mejorar su análisis. – hvd