2009-04-21 6 views
5

¿Existe un indicador para gcc que haga que las conversiones de largo a corto generen una advertencia sobre una posible pérdida de datos?¿Hay una advertencia de gcc 4.2 similar a la de Visual Studio con respecto a la posible pérdida de datos?

Estoy trabajando en una aplicación C++ compilada tanto para Visual Studio (2005) como para GCC 4.2 (para Mac OS X).

Las advertencias que las impresiones de Visual Studio a cabo siguen este patrón:

: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data 

He intentado -Wconversion, pero eso no es lo que estoy buscando. Lo único que he podido encontrar hasta ahora es una bandera experimental, -Wcoercion, que está asociada con GCC 4.3 (que no estoy seguro si aún queremos invertir).

22 de abril de 2009 a las 11:00 EST Edición: Para aclarar, quiero ver esa advertencia. Tenemos un código donde queremos saber cuándo ocurrirá una pérdida de datos. Si tengo el código:

unsigned long value1 = LONG_MAX; 
std::cout << "value1: " << value1 << std::endl; 

unsigned short value2 = value1; 
std::cout << "value2: " << value2 << std::endl; 

Puedo obtener este resultado esperado:

    valor1: 2147483647
    valor2: 65535

En nuestro código, que tienen especial afirma poner en marcha que realizar la coacción y advertirnos si el código ejecutado daría lugar a una pérdida de datos. Encontramos los lugares en nuestra gran base de código usando las advertencias de Visual Studio.

¿Hay alguna forma en que podamos generar estas advertencias en gcc 4.2?

Respuesta

4

Esta característica no está soportada en GCC 4.2, pero se ha añadido en GCC 4.3. Wiki page explaining it.

Gracias a schnaader y Evan Terran por proporcionarme los enlaces que me llevaron allí.

+1

Para la posible validación de la pérdida de datos intente '-Wshorten-64-to-32'. '-Wconversion' también verificará los errores de firma (puede ser overkill). – rustyx

+0

'-Wshorten-64-to-32' no es aceptado por GCC, solo por Clang. – Andy

4

Mire este GCC bug entry, tal vez ayude a entender por qué la conversión de largo a corto no da lugar a una advertencia.

+3

mejor aún, siga el enlace en esa entrada de error: http://gcc.gnu.org/wiki/Wcoercion –

+0

Esto no responde realmente mi pregunta. Pero gracias por mirar. –

4

Use -Wconversion. Parece que necesita esto incluso si ya especifica -Wall.

Definitivamente funciona en gcc4.3. Si no fue corregido por la versión 4.2, tendrá que actualizar para obtenerlo.

Ejemplo advertencia:

warning: conversion to 'short int' from 'int' may alter its value 
Cuestiones relacionadas