In C99, preprocessor arithmetic, used for #if expressions, must
be evaluated as if all signed values are of type intmax_t and all
unsigned values of type uintmax_t.  Many compilers are buggy in
this area, though.  For example, as of 2007, Sun C mishandles #if
LLONG_MIN < 0 on a platform with 32-bit long int and 64-bit
long long int.  Also, some older preprocessors mishandle
constants ending in LL.  To work around these problems, you can
compute the value of expressions like LONG_MAX < LLONG_MAX at
configure-time rather than at #if-time.