我有这个代码可以正常工作:
long nodeDistance(node_t a, node_t b) {
long d1 = abs(a.passi_1 - b.passi_2);
long d2 = abs(a.passi_2 - b.passi_2);
return d1 + d2;
}
我通过链接列表调用它,它返回一个看似合理的正面结果(120259067966)。但是,当我内联这两个变量时,它的行为非常奇怪;我也注意到它的编译速度要慢得多。
long nodeDistance(node_t a, node_t b) {
return abs(a.passi_1 - b.passi_1) + abs(a.passi_2 - b.passi_2);
}
通过同一个链接列表调用它时,它将返回一个负值(-16322)。这是为什么?
答案 0 :(得分:2)
这是因为第二个函数溢出:abs
返回int
,因此abs(...) + abs(...)
的结果是int
(有时会溢出),然后通过long
关键字转换为return
。
另一方面,第一个函数通过将操作数存储到long
变量中将操作数转换为long
,因此它们的总和也是long
,并且它不会溢出