我最近在我的代码中发现了一个错误,我花了几个小时来调试。
问题出在定义为的函数中:
unsigned int foo(unsigned int i){
long int v[]={i-1,i,i+1} ;
.
.
.
return x ; // evaluated by the function but not essential how for this problem.
}
v 的定义在我的开发机器(ubuntu 12.04 32 位,g++ 编译器)上没有引起任何问题,其中 unsigned int 被隐式转换为 long int,因此正确处理了负值。
在另一台机器上(ubuntu 12.04 64 位,g++ 编译器)但是这个操作并不安全。当 i=0 时,v[0] 没有设置为 -1,而是设置为一些奇怪的大值(因为它经常发生在试图使 unsigned int 为负数时)。
我可以解决将 i 的值转换为 long int 的问题
long int v[]={(long int) i - 1, (long int) i, (long int) i + 1};
一切正常(在两台机器上)。
我无法弄清楚为什么第一个在机器上工作正常而在另一个机器上不起作用。
你能帮我理解这一点,以便我将来避免这个或其他问题吗?