2

使用用户将在错误中看到的唯一错误代码很方便。这将使开发人员更容易找到错误的根源(只需在源代码中搜索错误代码即可),从而节省时间。

例子:

void f()
{
  std::cout << "UNIQUE001 " << "Error : The query failed" << std::endl;
}

void g()
{
  f();
}

int main()
{
  g();
  return 0;
}

在示例中,用户报告错误(“UNIQUE001 错误:查询失败”)。开发人员只需对“UNIQUE001”进行项目范围的搜索,即可立即找到引发错误的位置。(带有行号的文件是不够的,因为同时代码可能已经更改)。

所以,对于这个问题:有没有办法在编译时(理想情况下,使用预处理器宏或 TMP)或运行时(例如在单元测试中)强制错误代码字符串的唯一性?

更新

到目前为止,我最好的尝试是创建一个带有宏的结构,它创建一个值字符串等于类型名称和错误代码的类型。这有效并为重复类型提供了编译时错误,但不能在任何地方声明结构(例如在表达式中)

#define generateerrorcode(code) \
struct code \
{ \
  static const char* value = #code \
}; \

如果可能的话,我希望能够使用这样的唯一检查功能:

void some_function()
{
  std::cout << check_unique("UNIQUE001") << "Error : The query failed" << std::endl;
}
4

2 回答 2

1

如果您想 100% 确定,您可以使用GUID和数百万计的生成器之一。

于 2013-01-05T20:37:38.023 回答
0

你说:

(带有行号的文件是不够的,因为同时代码可能已经更改)。

但是,如果您自己不使用它但编译器会使用它怎么办?即__FILE__, __LINE__, __FUNCTION__. 请参阅:C++ 中的 __FILE__、__LINE__ 和 __FUNCTION__ 用法

但是,如果代码在错误之后但在您修复它之前被更改,它将失败。(但您可能会看到编辑历史记录)

于 2013-01-05T20:43:01.337 回答