]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/log.h
Implement deep copy of wxBitmapRefData
[wxWidgets.git] / include / wx / log.h
index 0e548d2bbe13d8553eedf34a46a5620457bd8689..164bdfca90c5b9da37afe674ff0159adda24f6ba 100644 (file)
@@ -565,16 +565,33 @@ DECLARE_LOG_FUNCTION2(SysError, long, lErrCode);
     // string identifiers
     DECLARE_LOG_FUNCTION2(Trace, wxTraceMask, mask);
 #else   //!debug || !wxUSE_LOG
     // string identifiers
     DECLARE_LOG_FUNCTION2(Trace, wxTraceMask, mask);
 #else   //!debug || !wxUSE_LOG
-    // these functions do nothing in release builds
-
-    // 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 wxVLogDebug(const wxChar *, va_list) { }
-    inline void wxLogDebug(const wxChar *fmt, ...) { wxUnusedVar(fmt); }
-    inline void wxVLogTrace(wxTraceMask, const wxChar *, va_list) { }
-    inline void wxLogTrace(wxTraceMask, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
-    inline void wxVLogTrace(const wxChar *, const wxChar *, va_list) { }
-    inline void wxLogTrace(const wxChar *, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
+    // 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) 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, ...) 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); }
+    #endif // HAVE_VARIADIC_MACROS/!HAVE_VARIADIC_MACROS
 #endif // debug/!debug
 
 // wxLogFatalError helper: show the (fatal) error to the user in a safe way,
 #endif // debug/!debug
 
 // wxLogFatalError helper: show the (fatal) error to the user in a safe way,
@@ -605,8 +622,8 @@ wxSafeShowMessage(const wxString& title, const wxString& text);
     #define wxLogLastError(api) wxLogApiError(api, wxSysErrorCode())
 
 #else   //!debug
     #define wxLogLastError(api) wxLogApiError(api, wxSysErrorCode())
 
 #else   //!debug
-    inline void wxLogApiError(const wxChar *, long) { }
-    inline void wxLogLastError(const wxChar *) { }
+    #define wxLogApiError(api, err) wxLogNop()
+    #define wxLogLastError(api) wxLogNop()
 #endif  //debug/!debug
 
 // wxCocoa has additiional trace masks
 #endif  //debug/!debug
 
 // wxCocoa has additiional trace masks