我有以下 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 被 typedef 为无符号字符)
如果我将其更改为:
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。
在 Ubuntu 机器上使用 gcc 编译这个“通常”的简单版本会在两种情况下打印正确的值。
我不确定这是为什么。我可以通过预先将 DEFINed 值分配给变量来规避它,但我宁愿不这样做。
有人知道这是为什么吗?也许有一个链接到有关此的更多信息?