【发布时间】:2018-07-17 18:17:05
【问题描述】:
今天早上又开始玩 SDL2,虽然与此处示例中使用 SDL 的事实无关,但出于这个问题的目的,我们可以考虑任何可能产生运行时错误的框架/工具包/库。
开始编写以下代码:
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
std::cerr << SDL_GetError() << std::endl;
}
我认为这不是很好。
这种将消息输出到
cerr的方式在未来如果需要的话不容易改变。如果我们想将错误消息打印到文件中,那么我们必须找到所有出现的这段代码,并将cout更改为文件。这显然既不实用也不容易。它不是很灵活。也许我们可能希望有错误、警告和一般信息消息。根据用户如何配置我们的程序,他们可能需要去不同的地方。也许有些用户想查看所有警告和信息,而另一些用户只想看到最“关键”的错误消息。
在其他项目中,我看到使用的东西看起来像宏。
例如,我想到了以下内容:
DT_THROW_IF(condition, "message");
我的假设是这是作为宏实现的。如果condition 的计算结果为true,则message 将出现在输出中。 (cout/cerr)
使用这样的宏可能会在某种程度上解决上述问题,但我听说it is not good practice to make extensive uses of macros。
- 在 C 或 C++ 程序中处理错误消息和警告消息的最佳实践是什么?有哪些好的解决方案可用,何时适合使用?
【问题讨论】:
-
不要同时添加 c++ 和 c 标签,它们完全不同。
-
投票结束为“基于意见”。正如您在问题中所说明的那样,有很多方法可以客观地实现这一目标。
-
也许更适合Software Engineering?
-
我在几乎所有的应用程序中都使用了类似 boost:log 的记录器。
-
@RichardCritten 这不是真的。除了简单性之外,我给出的示例在所有可能的指标上客观上都差很多。
标签: c++ c error-handling macros runtime-error