gpt4 book ai didi

C++:关于运行时警告错误和消息的最佳实践是什么?

转载 作者:行者123 更新时间:2023-11-30 18:35:00 25 4
gpt4 key购买 nike

今天早上又开始玩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++ 程序中处理错误消息和警告消息的最佳实践有哪些?有哪些好的解决方案可用以及何时使用它们合适?

最佳答案

为此使用宏是一个很好的做法。它允许隐式使用 __FILE____LINE____func__ 等。例如,BOOST_THROW_EXCEPTION 捆绑所有这些元数据关于您的异常(exception)情况。

就我个人而言,我总是创建一组特定于项目的宏,类似于您的DT_THROW_IF。这允许在抛出站点捕获完整的元数据,而不会造成困惑。如果宏构建得当,就没有什么缺点,而且很少需要修改或维护。

作为我正在讨论的示例,这是我的一个开源项目,其中包含这样的宏:https://github.com/jzwinck/pccl/blob/master/throw.hpp - 它们已经过生产测试(使用 GCC),欢迎您使用它们。

关于C++:关于运行时警告错误和消息的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48664121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com