Как исправить это предупреждение: преобразование в «unsigned char» из «int» может изменить его значение - PullRequest
1 голос
/ 18 мая 2011

Я получаю это предупреждение при компиляции библиотеки.

предупреждение: преобразование в 'unsigned char' из 'int' может изменить его значение

Это мешает нам использовать опцию компилятора -Werror.

Может кто-нибудь предложить способ исправить это предупреждение ???

Ответы [ 3 ]

8 голосов
/ 18 мая 2011

Компилятор предупреждает вас, что int может содержать значения, которые не помещаются в unsigned char.

Если вы абсолютно уверены , что в этом случае он всегда будет соответствовать, вы можете сообщить об этом компилятору с помощью static_cast

c = static_cast<unsigned char>(i);

Компилятор будет доверять вам в этом (и это ваша вина, если это не так).

5 голосов
/ 18 мая 2011

Снимайте в темноте:

Используйте static_cast, чтобы сообщить компилятору, что вы знаете, что преобразование не приведет к усечению: int i; unsigned char c = static_cast<unsigned char>(i);

Если вы не такконечно, посмотрите boost::numeric_cast.

Это эквивалентно static_cast в этом случае, но гораздо более явное (проще для поиска / поиска числовых преобразований).Кроме того, он выполняет связанные проверки.

2 голосов
/ 18 мая 2011

Самый очевидный ответ - узнать, как отключить это предупреждение на вашем компиляторе. Из других комментариев вы делаете:

flags &= ~x;

Компилятор, который предупреждает об этой типичной идиоме, является мозгом мертвым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...