Я часто использую присвоение «длинных» типизированных переменных «более коротким», например, int
до short
или uint32_t
до uint8_t
. Однажды я решил найти все такие случаи в своем коде, используя gcc, но с изумлением обнаружил, что 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
Использование gcc -Wall
или gcc -Wconversion
не помогло (gcc не выдал никакого предупреждения). На самом деле, он никогда не выводит никаких предупреждений для любого типа ввода и вывода (например, long
и unsigned char
).
Я никогда не обнаруживал фактическую ошибку в gcc, поэтому я почти уверен, что у такого поведения есть причина.
Так почему же нет предупреждения?
Обновление: я использую gcc 4.1.2.