#ifdef _WIN32 #define EPRINT(...) ({ int rc = fprintf(stderr, __VA_ARGS__); fflush(stderr); rc; }) #endif // Expression check macros #define ZERO(func, ...) ({ typeof(func(__VA_ARGS__))rv = func(__VA_ARGS__); CHECK(rv == 0, #func " failed"); rv; }) #define CHK(func, ...) ({ typeof(func(__VA_ARGS__))rv = func(__VA_ARGS__); CHECK(rv != 0, #func " failed"); rv; }) #define NNEG(func, ...) ({ typeof(func(__VA_ARGS__))rv = func(__VA_ARGS__); CHECK(rv >= 0, #func " failed"); rv; })