Я часто использую присвоение «длинных» типизированных переменных «более коротким», например 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.