这些语句在所有的C编译器中都是等价的吗?
d = (((INT32) a) * ((INT32) b));
d = ((INT32) a) * ((INT32) b);
d = ((INT32) a) * (INT32) b;发布于 2013-11-11 18:43:33
是的,它们是等价的。(typecast)是higher priority而不是*。
你可以只使用d = (INT32) a * (INT32) b;
发布于 2013-11-11 18:48:28
在没有宏的情况下,这些语句是等效的。
当涉及到宏时,人们通常会在代码两边加上各种括号,以确保额外的预处理器安全性。既然不推荐使用宏,我们现在就可以忘记这个场景了。
在任何情况下,我发现一个好的策略是将类型转换隔离在单独的行中,因为它们通常涉及潜在的数据丢失风险。所以在你的例子中,假设d的类型是INT32,我会这样写:
INT32 aINT32 = (INT32)(a);
INT32 bINT32 = (INT32)(b);
d = aINT32 * bINT32;https://stackoverflow.com/questions/19904249
复制相似问题