diff --git a/include/SDL_assert.h b/include/SDL_assert.h index 3a8446234d..a3d102538d 100644 --- a/include/SDL_assert.h +++ b/include/SDL_assert.h @@ -84,11 +84,16 @@ assert can have unique static variables associated with it. #define SDL_LINE __LINE__ /* -sizeof (x) makes the compiler still parse the expression even without -assertions enabled, so the code is always checked at compile time, but +sizeof ((x) ? 1 : 0) makes the compiler still parse the expression even +without assertions enabled, so the code is always checked at compile time, but doesn't actually generate code for it, so there are no side effects or -expensive checks at run time, just the constant size of what x WOULD be, +expensive checks at run time, just the constant size of what int would be, which presumably gets optimized out as unused. + +(The `? 1 : 0` is so this always dithers down to `sizeof (int)`...otherwise +you'll have problems when bitfields are used as the condition, since the +compiler will error out on the sizeof.) + This also solves the problem of... int somevalue = blah(); @@ -107,7 +112,7 @@ disable assertions. #endif #define SDL_disabled_assert(condition) \ - do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) + do { (void) sizeof ((condition) ? 1 : 0); } while (SDL_NULL_WHILE_LOOP_CONDITION) typedef enum {