Возможно, я не понимаю С++ правильно или это ошибка компилятора?
uint8_t a = 0x00;
uint8_t b = 0xFF;
if( a - b == 1 )
{
doNothing();
}
doNothing не вызывается (как и ожидалось), потому что результат (a-b) был неявным образом передан типу второго операнда в операции сравнения. А для номеров он подписал int. Хорошо.
if( a - b == (uint8_t)1 )
{
doNothing();
}
doNothing STILL не вызывается, но теперь я не понимаю причину этого! Я явно передал число uint8!
if( (uint8_t)(a - b) == 1 )
{
doNothing();
}
Теперь doNothing, наконец, называется, но опять же почему? Как вычитание двух uint8 возвращает int?
Компилятор - это uVision ARMCC для ARM Cortex M3.