define debugging log functions as (empty inline) wxLogNop() instead of nothing in the release builds, this ensures that we have the same code structure in debug/release builds and so there are no bugs when these functions are used inside if/else while also ensuring that even dumbest compilers do remove them completely in release builds

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41090 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-09-09 13:45:06 +00:00
parent fe8635a7e7
commit 388a1f6624

View File

@@ -565,22 +565,32 @@ DECLARE_LOG_FUNCTION2(SysError, long, lErrCode);
// string identifiers
DECLARE_LOG_FUNCTION2(Trace, wxTraceMask, mask);
#else //!debug || !wxUSE_LOG
// these functions do nothing in release builds
// these functions do nothing in release builds, but don't define them as
// nothing as it could result in different code structure in debug and
// release and this could result in trouble when these macros are used
// inside if/else
//
// note that making wxVLogDebug/Trace() themselves (empty inline) functions
// is a bad idea as some compilers are stupid enough to not inline even
// empty functions if their parameters are complicated enough, but by
// defining them as an empty inline function we ensure that even dumbest
// compilers optimise them away
inline void wxLogNop() { }
#define wxVLogDebug(fmt, valist)
#define wxVLogTrace(mask, fmt, valist)
#define wxVLogDebug(fmt, valist) wxLogNop()
#define wxVLogTrace(mask, fmt, valist) wxLogNop()
#ifdef HAVE_VARIADIC_MACROS
// unlike the inline functions below, this completely removes the
// wxLogXXX calls from the object file:
#define wxLogDebug(fmt, ...)
#define wxLogTrace(mask, fmt, ...)
// unlike the inline functions below, this completely removes the
// wxLogXXX calls from the object file:
#define wxLogDebug(fmt, ...) wxLogNop()
#define wxLogTrace(mask, fmt, ...) wxLogNop()
#else // !HAVE_VARIADIC_MACROS
// note that leaving out "fmt" in the vararg functions provokes a warning
// from SGI CC: "the last argument of the varargs function is unnamed"
inline void wxLogDebug(const wxChar *fmt, ...) { wxUnusedVar(fmt); }
inline void wxLogTrace(wxTraceMask, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
inline void wxLogTrace(const wxChar *, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
// note that leaving out "fmt" in the vararg functions provokes a warning
// from SGI CC: "the last argument of the varargs function is unnamed"
inline void wxLogDebug(const wxChar *fmt, ...) { wxUnusedVar(fmt); }
inline void wxLogTrace(wxTraceMask, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
inline void wxLogTrace(const wxChar *, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
#endif // HAVE_VARIADIC_MACROS/!HAVE_VARIADIC_MACROS
#endif // debug/!debug
@@ -612,8 +622,8 @@ wxSafeShowMessage(const wxString& title, const wxString& text);
#define wxLogLastError(api) wxLogApiError(api, wxSysErrorCode())
#else //!debug
#define wxLogApiError(api, err)
#define wxLogLastError(api)
#define wxLogApiError(api, err) wxLogNop()
#define wxLogLastError(api) wxLogNop()
#endif //debug/!debug
// wxCocoa has additiional trace masks