#include #define typecheck(type,x) \ ({ type __dummy; \ typeof(x) __dummy2; \ (void)(&__dummy == &__dummy2); \ 1; \ }) #define time_after(a, b) \ (typecheck(unsigned char, a) && \ typecheck(unsigned char, b) && \ ((char)((b) - (a)) < 0)) #define time_before(a,b) time_after(b,a) #define time_after_eq(a,b) \ (typecheck(unsigned char, a) && \ typecheck(unsigned char, b) && \ ((char)((a) -(b)) >= 0)) #define time_before_eq(a, b) time_after_eq(b,a) void do_nothing() { return; } int main() { unsigned char expire, now, next; unsigned char delta = 10; int i, j; for(i = 0; i < 256; i++) { expire = i; next = expire + delta; printf("\n\n\n[%u ... %u]\n", expire, next); now = expire; for(j=0; j < 1024; j++, now++) { if(j%256 == 0) printf("\n"); if (time_after_eq(now, next) || time_before(now, expire)) { do_nothing(); } else { printf(" now=%d\n", (char)now); } } } return 0; }