何かに取り組んでいて、次のようなコードに出くわしました。
#define MODULUS(a,b) ((a) >= 0 ? (a)%(b) : (b)-(-a)%(b))
unsigned char w;
unsigned char x;
unsigned char y;
char z;
/* Code that assigns values to w,x and y. All values assigned
could have been represented by a signed char. */
z = MODULUS((x - y), w);
演算(x - y)
は型変換の前に行われ、マクロは常に(a)%(b)
-- と評価されることを理解しています。結果は常にゼロ以上の unsigned char になるからです。ただし、コードは意図したとおりに機能し、私の理解には欠陥があると思います。そう...
私の質問は次のとおりです。
式が評価される前に、signed char への暗黙的な型変換が発生しますか?
上記のコードが機能しない状況 (たとえば、符号なしの値が大きすぎて符号付きの値で表すことができない場合) はありますか?