У меня есть следующий код C:
#define PRR_SCALE 255
...
uint8_t a = 3;
uint8_t b = 4;
uint8_t prr;
prr = (PRR_SCALE * a) / b;
printf("prr: %u\n", prr);
Если я скомпилирую это (используя компилятор платформы msp430 для небольшой встроенной ОС под названием contiki), результат равен 0, а я ожидал 191. (uint8_t определен как беззнаковый символ)
Если я изменю его на:
uint8_t a = 3;
uint8_t b = 4;
uint8_t c = 255;
uint8_t prr;
prr = (c * a) / b;
printf("prr: %u\n", prr);
он работает правильно и печатает 191.
Компиляция простой версии этого «нормального» с использованием gcc в поле Ubuntu выводит правильное значение в обоих случаях.
Я не совсем уверен, почему это так. Я мог бы обойти это, заранее присвоив значение DEFINEd переменной, но я бы не стал этого делать.
Кто-нибудь знает, почему это так? Возможно, со ссылкой на дополнительную информацию об этом?