C++ C++;:关于运行时警告错误和消息的最佳实践是什么? 今天上午刚刚开始玩SDL2,虽然在这里的例子中使用SDL是不相关的,为了这个问题,我们可以考虑任何能产生运行时错误的框架/工具包/库。
开始编写以下代码:C++ C++;:关于运行时警告错误和消息的最佳实践是什么? 今天上午刚刚开始玩SDL2,虽然在这里的例子中使用SDL是不相关的,为了这个问题,我们可以考虑任何能产生运行时错误的框架/工具包/库。,c++,c,error-handling,macros,runtime-error,C++,C,Error Handling,Macros,Runtime Error,开始编写以下代码: if(SDL_Init(SDL_INIT_VIDEO) < 0) { std::cerr << SDL_GetError() << std::endl; } 我的假设是,这是作为宏实现的。如果条件的计算结果为真,则输出中将出现消息。(cout/cerr) 使用这样的宏可能会在某种程度上解决上述问题,不过我听说了 在C或C++程序中,错误消息和警告消息的处理有哪些最佳实践?有哪些好的解决方案可用,何时使用合适 为此使用宏是一种很好的做法
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
std::cerr << SDL_GetError() << std::endl;
}
我的假设是,这是作为宏实现的。如果条件
的计算结果为真
,则输出中将出现消息
。(cout
/cerr
)
使用这样的宏可能会在某种程度上解决上述问题,不过我听说了
-
在C或C++程序中,错误消息和警告消息的处理有哪些最佳实践?有哪些好的解决方案可用,何时使用合适
- 为此使用宏是一种很好的做法。它支持隐式使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,\uuuuuuu func\uuuuuuuuuuuu
等。例如,BOOST\u THROW\u EXCEPTION
为您打包所有有关异常的元数据
就我个人而言,我总是创建一组特定于项目的宏,类似于DT\u THROW\u IF
。这允许在抛出站点捕获完整的元数据,而不会造成混乱。如果宏构造正确,就没有缺点,而且它们很少需要修改或维护
作为我所说的一个例子,这里有一个开源的项目,我有这样的宏:它们是用GCC测试的,欢迎使用它们。
不要同时添加C++和C标记,它们是完全不同的。正如您在问题中所说明的,有很多方法可以实现这一点,没有一种比另一种更客观。也许更适合于?我使用类似boost的记录器:登录我几乎所有的应用程序。@RichardCritten这不是真的。除了简单之外,我给出的例子在所有可能的度量中都是客观地糟糕。对于C++的所有模板和对象愚蠢行为,它从来没有完全取代宏。所有关于坏宏的讨论都是为了阻止新手程序员过度使用它们。有趣的练习:为那些没有实现vararg宏但仍然捕获\uuuu文件\uuuuu
,\uu行\uuuu
和\uu函数\uuuuu
@AndrewHenle的旧编译器编写日志宏:我链接的宏依赖于C++11(可变模板),不仅仅是变量宏。我会惊讶地发现一个编译器支持前者,但不支持后者……但可能有一个。\uuuuuuuu文件
和\uuuuuu行
与宏有什么关系?什么是\uuuu函数
,你是说标准的\uuuuuu函数
?这些都不依赖于预处理器。@Lundin函数和其他抽象工具在应该抛出错误的源代码中没有内联。如果在报告错误
函数中使用\uuuu行
,那么\uu行
将引用该函数,而不是调用方,正如您从错误报告中所期望的那样。这样,我们可能会得到std::source\u位置代码>最终。。。
DT_THROW_IF(condition, "message");