(Following is a slightly modified version of an article I posted on a previous iteration of this blog.)
At a former job, I spent a fair amount of time porting software. Porting is difficult, and in the product I worked on, which was fairly mature, most of the issues I ran into were configuration or environmental, and were rarely problems with the code.
One unit test revealed an interesting bug when I was porting from 32-bit to a 64-bit compiler in C++.
int value = 0xFFFFFFFF;
The intention was an integer that had all bit fields turned on, which, for a signed value, is equivalent to -1. But when this code is compiled with a 64-bit compiler, reality no longer matches intent. The value is now ’0x00000000FFFFFFFF’, not equivalent to -1 in the 64-bit world.
int value = -1;
The moral: Try not to be too smart for your own good!