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 回答