#include /* Why is this so damn hard? */ #undef __GNUC__ #undef __USE_ISOC99 #define __USE_ISOC99 #include int main(void) { long long i, llmin, llmax = 0; #if defined(LLONG_MIN) && defined(LLONG_MAX) fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n"); llmin = LLONG_MIN; llmax = LLONG_MAX; #else fprintf(stderr, "Calculating LLONG_MIN and LLONG_MAX\n"); /* This will work on one's complement and two's complement */ for (i = 1; i > llmax; i <<= 1, i++) llmax = i; llmin = llmax + 1LL; /* wrap */ #endif fprintf(stderr, "llmin: %lld\n", llmin); fprintf(stderr, "llmin + 1: %lld\n", llmin + 1); fprintf(stderr, "llmin - 1: %lld\n", llmin - 1); fprintf(stderr, "llmax: %lld\n", llmax); fprintf(stderr, "llmax + 1: %lld\n", llmax + 1); fprintf(stderr, "llmax - 1: %lld\n", llmax - 1); if (llmin + 1 < llmin) { fprintf(stderr, "sanity fail: (llmin + 1 < llmin)\n"); } if (llmin - 1 < llmin) { fprintf(stderr, "sanity fail: (llmin - 1 < llmin)\n"); } if (llmax + 1 > llmax) { fprintf(stderr, "sanity fail: (llmax + 1 > llmax)\n"); } if (llmax - 1 > llmax) { fprintf(stderr, "sanity fail: (llmax - 1 > llmax)\n"); } /* Sanity check */ if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax || llmax - 1 > llmax) { fprintf(stderr, "sanity check failed\n"); exit(2); } exit(0); }