X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a9672e89d5dac5e3bc1aee6f72c5ae4b7cd2e34e..38a097f588121ffcab2fa57e4494a6d0783c3567:/include/wx/debug.h diff --git a/include/wx/debug.h b/include/wx/debug.h index 06f302d820..fc12f49f25 100644 --- a/include/wx/debug.h +++ b/include/wx/debug.h @@ -68,7 +68,7 @@ /* ---------------------------------------------------------------------------- */ /* Debugging macros */ /* */ -/* All debugging macros rely on ASSERT() which in turn calls user-defined */ +/* All debugging macros rely on ASSERT() which in turn calls the user-defined */ /* OnAssert() function. To keep things simple, it's called even when the */ /* expression is true (i.e. everything is ok) and by default does nothing: just */ /* returns the same value back. But if you redefine it to do something more sexy */ @@ -113,12 +113,24 @@ /* generic assert macro */ #define wxASSERT(cond) wxASSERT_MSG(cond, NULL) - /* assert with additional message explaining it's cause */ - #define wxASSERT_MSG(cond, msg) \ - if ( cond ) \ - ; \ - else \ - wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) + + /* assert with additional message explaining its cause */ + + /* compilers can give a warning (such as "possible unwanted ;") when using */ + /* the default definition of wxASSERT_MSG so we provide an alternative */ + #if defined(__MWERKS__) + #define wxASSERT_MSG(cond, msg) \ + if ( cond ) \ + {} \ + else \ + wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) + #else + #define wxASSERT_MSG(cond, msg) \ + if ( cond ) \ + ; \ + else \ + wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) + #endif /* special form of assert: always triggers it (in debug mode) */ #define wxFAIL wxFAIL_MSG(NULL) @@ -130,18 +142,18 @@ #define wxFAIL_COND_MSG(cond, msg) \ wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(cond), msg) - /* an assert helper used to avoid warning when testing constant expressions, */ + /* An assert helper used to avoid warning when testing constant expressions, */ /* i.e. wxASSERT( sizeof(int) == 4 ) can generate a compiler warning about */ /* expression being always true, but not using */ /* wxASSERT( wxAssertIsEqual(sizeof(int), 4) ) */ /* */ - /* NB: this is made obsolete by wxCOMPILE_TIME_ASSERT() and shouldn't be */ - /* used any longer */ + /* NB: this is made obsolete by wxCOMPILE_TIME_ASSERT() and should no */ + /* longer be used. */ extern bool WXDLLIMPEXP_BASE wxAssertIsEqual(int x, int y); #else #define wxTrap() - /* nothing to do in release modes (hopefully at this moment there are */ + /* nothing to do in release mode (hopefully at this moment there are */ /* no more bugs ;-) */ #define wxASSERT(cond) #define wxASSERT_MSG(cond, msg) @@ -158,11 +170,11 @@ #define wxAssertFailure wxFalse -/* NB: the following macros work also in release mode! */ +/* NB: the following macros also work in release mode! */ /* These macros must be used only in invalid situation: for example, an - invalid parameter (NULL pointer) is passed to a function. Instead of + invalid parameter (e.g. a NULL pointer) is passed to a function. Instead of dereferencing it and causing core dump the function might try using CHECK( p != NULL ) or CHECK( p != NULL, return LogError("p is NULL!!") ) */ @@ -177,15 +189,29 @@ #define wxCHECK2(cond, op) wxCHECK2_MSG(cond, op, NULL) /* as wxCHECK2 but with a message explaining why we fail */ -#define wxCHECK2_MSG(cond, op, msg) \ - if ( cond ) \ - ; \ - else \ - { \ - wxFAIL_COND_MSG(#cond, msg); \ - op; \ - } \ - struct wxDummyCheckStruct /* just to force a semicolon */ + +/* see comment near the definition of wxASSERT_MSG for the # if/else reason */ +#if defined(__MWERKS__) + #define wxCHECK2_MSG(cond, op, msg) \ + if ( cond ) \ + {} \ + else \ + { \ + wxFAIL_COND_MSG(#cond, msg); \ + op; \ + } \ + struct wxDummyCheckStruct /* just to force a semicolon */ +#else + #define wxCHECK2_MSG(cond, op, msg) \ + if ( cond ) \ + ; \ + else \ + { \ + wxFAIL_COND_MSG(#cond, msg); \ + op; \ + } \ + struct wxDummyCheckStruct /* just to force a semicolon */ +#endif /* special form of wxCHECK2: as wxCHECK, but for use in void functions */ /* */