在C ++中包含错误消息的首选方法是什么?

时间:2013-05-26 18:47:35

标签: c++ error-handling coding-style

以下哪种替代方案更受青睐?

  1. 在代码中包含错误消息:

    cout << "I am an error message!" <<endl;
    exit(-1);
    
  2. 在单独的头文件中定义错误消息:

    #include "ErrorMessages.h"
    cout << ERRORMESSAGE_1 <<endl;
    exit(-1);
    
  3. 创建一个包含错误消息的函数。

  4. 在这些消息中包含唯一错误ID也很常见吗?

2 个答案:

答案 0 :(得分:4)

这既是利益又是垮台的优先事项。

错误网站上的硬编码字符串文字可能难以维护,但在我的诚实意见中也更容易阅读。

例如

cout << "You were unable to login. "
     << "Please check you're user name and password and try again"
     << endl;

显示意图比

好很多
cout << LOGIN_CREDENTIALS_ERROR << endl;

但是,不对邮件进行硬编码的优势(23):

//Foo.cpp:
cout << DIVIDE_BY_ZERO_ERROR << endl;

//Bar.cpp
cout << DIVIDE_BY_ZERO_ERROR << endl;

// If you want to change DIVIDE_BY_ZERO_ERROR text you only have to do it once
//ErrorMessages.h (Ops grammar needs correcting)
const std:string DIVIDE_BY_ZERO_ERROR = "Dont not divide by zero";

此外,如果错误消息可能会发生变化:

// ErrorMessages.h
#ifdef LOCALIZATION_EN
const std:string FRIENDLY_ERROR = "Hello, you are doing something wrong";
#elseif LOCALIZATION_FR
const std:string FRIENDLY_ERROR = "Bonjour, ...";
...

OR

// ErrorMessages.h
#ifdef DEBUG
const std:string SOME_ERROR = "More detailed error information for developers"
#else
const std:string SOME_ERROR = "Human friendly error message"
#endif

答案 1 :(得分:1)

这取决于您的应用程序是否具有本地化要求。如果这样做,您希望将所有字符串放在一个位置,包括错误消息。如果您没有这样的要求,我更喜欢将消息内联(您的第一个示例)。这样,如果我想找到抱怨的代码,我可以只是grep这条消息。