#ifdef DEBUG
#define dprintf(x...) printf(x)
#else
#define dprintf(x...)
#endif
如上。上面的这个是用的 printf 函数,在 C++中用有什么负面影响吗?不是说 cout 和 printf 最好不要混用吗?所以,能不能将上面的逻辑用 cout 实现?
1
AFOX 2024-01-29 16:59:14 +08:00
用 spdlog 库
|
2
Astor 2024-01-29 20:58:20 +08:00
C++ 用 printf 没问题啊,甚至性能可能稍微好一点。不过日志打印到 stderr 里面。
|
3
kirory 2024-01-29 21:05:12 +08:00
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 2024-01-29 21:30:53 +08:00
cpp 要站在巨人的肩膀上,所以 #1 SPDLOG 推荐
|
5
sjkdsfkkfd 2024-01-29 21:39:22 +08:00
用 fmt 多好,20 自带,20 之前用 libfmt
``` #ifdef DEBUG #define dprintf(...) fmt::print(__VA_ARGS__) #else #define dprintf(...) static_assert(true,"") #endif ``` |
6
setname 2024-01-30 09:07:14 +08:00
```
#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) ``` |