unsigned char a, b;
b = something();
a = ~b;
Статический анализатор пожаловался на усечение в последней строке, предположительно из-за того, что b
повышается до int до того, как его биты перевернуты, и результат будет иметь тип int.
Меня интересует только последний байт продвигаемого int — если b
было 0x55, мне нужно, чтобы a
было 0xAA. Мой вопрос: говорит ли спецификация C что-нибудь о том, как происходит усечение, или это определено/не определено реализацией? Гарантируется ли, что a
всегда будет присвоено ожидаемое значение, или это может пойти не так на соответствующей платформе?
Конечно, приведение результата перед назначением отключит статический анализатор, но я хочу знать, безопасно ли вообще игнорировать это предупреждение.
something()
- person JeremyP   schedule 04.05.2011mask1[0] = ~mask2[0];
, где оба являются массивами типа unsigned char. Видимо, мой статический анализатор не такой умный, как clang :) - person Amarghosh   schedule 04.05.2011