2011-01-02 7 views
5

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.

+0

@icecrime: gcc ciertamente necesita compilarlo. En las plataformas donde short es más corto que int, debe y debe advertir. –

Respuesta

5

No puedo reproducir eso. Compilando este código con gcc 4.4.5 con -Wconversion, obtengo

a.cc: In function ‘void f()’: 
a.cc:7: warning: conversion to ‘short int’ from ‘int’ may alter its value 
+0

Sí, yo también con 4.5.2 -Wconversion. –

Cuestiones relacionadas