是否有关于我应该在C ++代码中使用哪些错误号的约定?
我从1开始还是应该选择一个高数字并从那里开始?
请求了一个例子,所以这里是:
#define ERR_EVERYTHING_IS_WRONG 42
try
{
throw ERR_EVERYTHING_IS_WRONG;
}
catch(int err)
{
//
}
答案 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处理程序。