c++ - 有没有办法打开/关闭标准 :cerr (or equivalent)?

标签 c++ visual-studio visual-studio-2012

在不使用成熟的日志记录库(或 IF 语句)的情况下 - 在 C++ 中是否有办法有时将消息打印到控制台,有时不打印?

我正在使用 std::cerr,有没有办法控制何时输出或不输出?

理想情况下我可以:

std::cerr << "Constructor called" << endl;

有办法启用/禁用这行代码吗?

最佳答案

我不确定您所说的“没有if”是什么意思,但是您可以自己编写代码而无需使用if。宏可以为您检查标志。

#define CERR if (cerr_disabled) {} else std::cerr
bool cerr_disabled = false;

然后,在您的代码中:

CERR << "error message" << std::endl;

如果 cerr_disabled 为真,则不会打印任何内容。

这种宏方法的优点是,如果错误日志记录被禁用,则不会评估任何打印参数。例如,如果您需要调用函数来创建更复杂的日志字符串:

std::string fancy_log_message () {
    //...
}

CERR << fancy_log_message();

如果 cerr_disabled 为真,则不会调用 fancy_log_message()。这是仅通过抑制流对象本身无法实现的。

关于c++ - 有没有办法打开/关闭标准 :cerr (or equivalent)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19069058/

相关文章:

c++ - 其他对象中的对象真的共享同一个地址吗?

c++ - 使用 CMake 为 VS 2017 生成解决方案的问题

Angular 开发和 TFS

.net - c#.net 本地数据库 Windows 窗体

c# - 生成具有不同 'Content' 的单选按钮

c++ - 异常安全的 for 循环

c++ - 它返回新对象吗?

visual-studio - 无法删除断点

c++ - 如何使用 _CRT_SECURE_NO_WARNINGS

visual-studio-2012 - 在 asp.net 4.5 中使用新的模型绑定(bind)来格式化日期字段