C/C++ 程序 debug print

#ifdef DEBUG
   #define DBOUT(x) x
#else
   #define DBOUT(x)
#endif

DBOUT(cout<<"debug message"<<endl);

Debug with Empty Class

#ifdef NDEBUG
    class DebugStream {};
    template <typename T>
    DebugStream &operator<<(DebugStream &s, T) { return s; }
#else
    typedef ostream DebugStream;
#endif

DebugStream debug;

debug << "some error\n";

-- Debug-only ostreams in C++?

Debug with Short-Circuiting

#ifdef DEBUG
  #define DBOUT std::cerr
#else
  #define DBOUT 0 && std::cerr
#endif

TRACE_DEBUG

TRACE_DEBUG("some message");
  • TRACE_FUNC
  • TRACE_ERROR
  • TRACE_LOOP
  • TRACE_INFO
  • TRACE_DEBUG