In the following code, assume ints are 16 bits.
int f(void)
{
int i = 0;
return i > 0xffff;
}
|
Because the hexadecimal constant’s type is either int (with a value of– 1 on a two’s-complement machine) or an unsigned int (with a value of 65535), the comparison is true in– Xs and -Xt modes, and false in– Xa and– Xc modes.
Again, an appropriate cast clarifies the code and suppresses a warning:
-Xt, -Xs modes:
i > (int)0xffff
-Xa, -Xc modes:
i > (unsigned int)0xffff
or
i > 0xffffU
|
The U suffix character is a new feature of ISO C and probably produces an error message with older compilers.