如何在 C++中实现这个效果?

sbldehanhan · 2024-1-29 16:54:46 · 79 次点击
```
#ifdef DEBUG
#define dprintf(x...)        printf(x)
#else
#define dprintf(x...)
#endif
```
如上。上面的这个是用的 printf 函数,在 C++中用有什么负面影响吗?不是说 cout 和 printf 最好不要混用吗?所以,能不能将上面的逻辑用 cout 实现?
举报· 79 次点击
登录 注册 站外分享
6 条回复  
AFOX 小成 2024-1-29 16:59:14
用 spdlog 库
Astor 小成 2024-1-29 20:58:20
C++ 用 printf 没问题啊,甚至性能可能稍微好一点。不过日志打印到 stderr 里面。
kirory 小成 2024-1-29 21:05:12
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
kkk9 初学 2024-1-29 21:30:53
cpp 要站在巨人的肩膀上,所以 #1 SPDLOG 推荐
sjkdsfkkfd 小成 2024-1-29 21:39:22
用 fmt 多好,20 自带,20 之前用 libfmt

```
#ifdef DEBUG
#define dprintf(...) fmt::print(__VA_ARGS__)
#else
#define dprintf(...) static_assert(true,"")
#endif
```
setname 小成 2024-1-30 09:07:14
```
#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)
```
返回顶部