C ++错误号分配 - 是否有任何可接受的标准?

时间:2014-09-18 08:54:34

标签: c++ standards error-code

是否有关于我应该在C ++代码中使用哪些错误号的约定?

我从1开始还是应该选择一个高数字并从那里开始?

请求了一个例子,所以这里是:

#define ERR_EVERYTHING_IS_WRONG 42

try
{
    throw ERR_EVERYTHING_IS_WRONG;
}
catch(int err)
{
    //
}

5 个答案:

答案 0 :(得分:1)

没有规则,只要你保持合理的分配方式,你就可以做任何你想做的事。

如果您选择3用户输入错误,请仅保留该错误,否则您很快就会迷路

答案 1 :(得分:1)

在C ++中,通常会有1表示成功,0表示错误代码,不太可能是C,其中有许多函数返回0表示成功(strcmp等等)

这有时会让人感到困惑,特别是在与C代码交互时,我发现它有助于提高可读性。

if(cplusplus_function()) {...}

更具可读性
if(!c_function()){ ... }

还要记住,您在C ++中有利用例外,并尝试避免嵌套if-s

答案 2 :(得分:1)

最好的方法之一是遵循C ++代码中不同错误惯例的标准枚举

例如:

enum FILE_ERROR{
FILE_NOT_FOUND,          
FILE_NO_ACCESS,
FILE_BUSY
};

所以在代码中你可以使用FILE_NOT_FOUND作为错误号,即0。因此,这很容易理解错误类型代表什么

答案 3 :(得分:1)

对于try-catch,请勿使用数字!使用从标准异常类派生的类。例如:

#include <stdexcept>

class my_error : public std::runtime_error {
public:
  explicit my_error(const std::string& what_arg) : std::runtime_error(what_arg) {};
};

用法(Coliru):

#include <iostream>

int main() {
  try {
    throw my_error("You can even pass a string here!");
  } catch (const my_error& e) {
    std::cerr << e.what();
  }
}

或更简单:使用std::runtime_error

#include <stdexcept>
#include <iostream>

int main() {
  try {
    throw std::runtime_error("Error happened");
  } catch (const std::runtime_error& e) {
    std::cerr << e.what();
  }
}

没有标准库:

class my_error {
};

int main() {
  try {
    throw my_error();
  } catch (const my_error& e) {
    //TODO handle my_error
  }
}

答案 4 :(得分:0)

你没有&#34;扔掉&#34;任何数字,你&#34;扔&#34;一个例外,一个派生自std::exception的类的对象。

标准异常包含文本,实际上不包含错误编号。但是,您可以为不同类型的异常创建不同的类,并根据抛出的异常类型使用不同的catch处理程序。