私は次の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と呼ばれる小さな組み込みOSの場合)、結果は0になりますが、191を期待していました(uint8_tはunsigned charとして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値を変数に割り当てることで回避できますが、そうはしません。
なぜこれなのか誰か知っていますか?おそらく、これに関するいくつかの詳細情報へのリンクがありますか?