printf("%lld \n", 4000000000);
returns
4000000000
-> *wrong: 4000000000 is the binary 32 bit pattern "11101110011010110010100000000000" (and not a "long long"!) *
4000000000 has no suffix, is not representable as an int or long int, so type should be long long int (as I understand the C99 standard). I can't see the problem here.
At least a warning would be nice!!
An extra warning for the case
printf("%d \n", 4000000000) would be nice, but adding compiler code for matching
various formatting strings to it's arguments is a lot of work, and a royal pain. I doubt it will happen (anytime soon, at least).