A menudo uso asignación de "ya" escrito variables para los "cortos", por ejemplo int
a short
o uint32_t
a uint8_t
. Un día decidí encontrar todos esos casos en mi código usando gcc, pero descubrí con asombro que ¡gcc no emitía ninguna advertencia!ninguna advertencia sobre la cesión de int a corto (gcc)
int long_value;
short short_value;
std::cin >> long_value; // Example input: 32769
short_value = long_value; // MS Visual Studio complains here at warning level 4
std::cout << "Long: " << long_value << '\n'; // My example output: 32769
std::cout << "Short: " << short_value << '\n'; // My example output: -32767
Usando gcc -Wall
o gcc -Wconversion
no ayudó (gcc no hizo ninguna advertencia de salida). En realidad, nunca muestra ninguna advertencia para ningún tipo de entrada y salida (por ejemplo, long
y unsigned char
).
Nunca he encontrado un error real en gcc, así que estoy casi seguro de que este comportamiento tiene un motivo.
¿Por qué no hay una advertencia?
Actualización: uso gcc 4.1.2.
@icecrime: gcc ciertamente necesita compilarlo. En las plataformas donde short es más corto que int, debe y debe advertir. –