1

これらのステートメントは、すべての C コンパイラで同等ですか?

d = (((INT32) a) * ((INT32) b));
d =  ((INT32) a) * ((INT32) b);
d =  ((INT32) a) * (INT32) b;
4

2 に答える 2

4

はい、同等です。よりも優先度(typecast)が高いです。*

あなたはただ持つことができますd = (INT32) a * (INT32) b;

于 2013-11-11T10:43:32.787 に答える
1

近くにマクロがない場合、これらのステートメントは同等です。

マクロが関与する場合、プリプロセッサの安全性を高めるために、通常、コードの周りにあらゆる種類の括弧を配置します。ただし、マクロは推奨されていないため、このシナリオについては忘れて構いません。

いずれにせよ、型キャストは通常​​、データが失われる可能性があるため、別の行に型キャストを分離することが適切なポリシーであることがわかりました。したがって、あなたの場合、d が INT32 型であると仮定すると、次のように記述します。

INT32 aINT32 = (INT32)(a);
INT32 bINT32 = (INT32)(b);
d = aINT32 * bINT32;
于 2013-11-11T10:48:27.923 に答える