Нет предупреждения о присвоении int коротким (gcc) - PullRequest
5 голосов
/ 02 января 2011

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

Ответы [ 2 ]

7 голосов
/ 02 января 2011

Эта функция была добавлена ​​в версии gcc 4.3.Ранее это было недоступно.

Я надеюсь, что вы используете gcc версии 4.2 или ниже.

http://gcc.gnu.org/wiki/NewWconversion подтверждает это.

Эта ошибка: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2707 также говорит оэто.

5 голосов
/ 02 января 2011

Я не могу воспроизвести это. Скомпилировав этот код с помощью gcc 4.4.5 с -Wconversion, я получаю

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