错误报告知道它在代码中的位置

Vol*_*orm 3 c++ c-preprocessor

我有一个名为"err"的流,它位于命名空间Errors中.这就是开发人员如何以用户友好的方式报告错误.因此,当出现问题时,开发人员将编写错误消息:

Errors::err << "Oh no. That was a bad thing.";
Run Code Online (Sandbox Code Playgroud)

是否可以使用预处理器附加[__FILE__:__LINE__]到错误消息而不更改当前的错误报告样式?即上面的命令现在(在预处理魔术之后)将其输出到错误文件:

不好了.那是件坏事.[file.cc:20]

我自己试过这个,但是C预处理器似乎不喜欢命名空间,我觉得我不能在代码中的任何地方替换"错误" - 如果开发人员决定使用using Errors::err或者这将是一个更大的问题using namespace Errors.

在我想要实现的范围内,C-Preprocessor是否与编码风格根本不兼容?如果有的话还有其他任何方法(也许是基于Makefile的?)来做我想做的事情?

jpa*_*cek 5

对于您目前的风格,这是不可能的.在运行时调用的例程不知道谁调用它们.但是,您可以使用特定于平台的函数来获取回溯并编写它.

如果您可以替换所有错误报告代码,例如.同

REPORT_ERROR( "Oh no. That was a bad thing." );
Run Code Online (Sandbox Code Playgroud)

这很容易.你只是#define

#define REPORT_ERROR(x) Errors::err << x << "[" << __FILE__ << ":" << __LINE__ << "]" << endl;
Run Code Online (Sandbox Code Playgroud)