这些语句在所有 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;