#ifdef DEBUG
#define dprintf(x...) printf(x)
#else
#define dprintf(x...)
#endif
如上。上面的这个是用的 printf 函数,在 C++中用有什么负面影响吗?不是说 cout 和 printf 最好不要混用吗?所以,能不能将上面的逻辑用 cout 实现?
1
AFOX 329 天前
用 spdlog 库
|
2
Astor 329 天前
C++ 用 printf 没问题啊,甚至性能可能稍微好一点。不过日志打印到 stderr 里面。
|
3
kirory 329 天前
class DummyStream{
public: template<typename T> DummyStream operator << (const T&) const { return * this; } }; #ifdef DEBUG #define dprintf(x...) std::cout #else #define dprintf(x...) DummyStream{} #endif |
4
kkk9 329 天前
cpp 要站在巨人的肩膀上,所以 #1 SPDLOG 推荐
|
5
sjkdsfkkfd 329 天前
用 fmt 多好,20 自带,20 之前用 libfmt
``` #ifdef DEBUG #define dprintf(...) fmt::print(__VA_ARGS__) #else #define dprintf(...) static_assert(true,"") #endif ``` |
6
setname 329 天前
```
#define dprintf(x...) do { \ int size_s = std::snprintf(nullptr, 0, x) + 1; \ char* str = new char[size_s]; \ std::snprintf(str, size_s, x); \ cout << str << endl; \ delete []str; \ } while(0) ``` |