これらのステートメントは、すべての C コンパイラで同等ですか?
d = (((INT32) a) * ((INT32) b));
d = ((INT32) a) * ((INT32) b);
d = ((INT32) a) * (INT32) b;
これらのステートメントは、すべての C コンパイラで同等ですか?
d = (((INT32) a) * ((INT32) b));
d = ((INT32) a) * ((INT32) b);
d = ((INT32) a) * (INT32) b;
はい、同等です。よりも優先度(typecast)
が高いです。*
あなたはただ持つことができますd = (INT32) a * (INT32) b;
近くにマクロがない場合、これらのステートメントは同等です。
マクロが関与する場合、プリプロセッサの安全性を高めるために、通常、コードの周りにあらゆる種類の括弧を配置します。ただし、マクロは推奨されていないため、このシナリオについては忘れて構いません。
いずれにせよ、型キャストは通常、データが失われる可能性があるため、別の行に型キャストを分離することが適切なポリシーであることがわかりました。したがって、あなたの場合、d が INT32 型であると仮定すると、次のように記述します。
INT32 aINT32 = (INT32)(a);
INT32 bINT32 = (INT32)(b);
d = aINT32 * bINT32;