对许多函数调用进行错误检查
Error checking on many function calls
有时当我用 C++/C 编程时,我最终会多次调用同一个函数,我想知道检查所有这些调用的错误的最有效方法是什么?使用 if else
语句会占用大量代码并且看起来很丑陋。我已经想出了自己的方法来检查错误,也许我应该使用更好的方法。
int errs[5] = {0};
errs[0] = functiona(...);
errs[1] = functiona(...);
...
errs[5] = functiona(...);
for (int i = 0; i < 5; i++)
{
if (err[i] == 0)
MAYDAY!_wehaveanerror();
}
注意:我知道使用 try
和 catch
可能对C++更好,因为它可以通过在第一个错误上抛出异常来解决此问题,但问题是它与许多返回错误代码的函数不兼容,例如 Windows API。谢谢!
你可以像这样写一些伪C++:
struct my_exception : public std::exception {
my_exception(int); /* ... */ };
int main()
{
try
{
int e;
if ((e = function()) != SUCCESS) { throw my_exception(e); }
if ((e = function()) != SUCCESS) { throw my_exception(e); }
if ((e = function()) != SUCCESS) { throw my_exception(e); }
}
catch (my_exception & e)
{
std::cerr << "Something went wrong: " << e.what() << "n";
}
}
如果...如果函数有机会抛出不同的错误,您还应该添加一个 catch all。
struct my_exception : public std::exception {
my_exception(int); /* ... */ };
int main()
{
try
{
int e;
if ((e = function()) != SUCCESS) { throw my_exception(e); }
if ((e = function()) != SUCCESS) { throw my_exception(e); }
if ((e = function()) != SUCCESS) { throw my_exception(e); }
}
catch (my_exception & e)
{
std::cerr << "Something went wrong: " << e.what() << "n";
}
catch (...)
{
//Error Checking
}
}
如何处理函数中的检查?
void my_function() {
if (!create_window())
throw Error("Failed to create window");
}
int main() {
try {
my_function();
} catch (const Error& e) {
cout << e.msg << endl;
} catch (...) {
cout << "Unknown exception caughtn"
}
return 0;
}
如果你一遍又一遍地调用同一个函数,最简洁的方法可能是使用宏。 我会建议这样的事情:
#define CHECKERROR(x) if(x == 0) wehaveanerror()
CHECKERROR(function(...));
CHECKERROR(function(...));
显然,此宏将非常特定于所涉及的特定函数和错误处理程序,因此在这些调用之后undef
它可能是谨慎的。
做得更老派,但保留原始错误响应,但在错误发生时立即响应,没有看起来很丑:
#define callcheck(r) if ((r)==0) MAYDAY!_wehaveanerror()
callcheck(functiona(...));
callcheck(functiona(...));
...
相关文章:
- C++中的输入限制和错误检查
- 在错误检查非 int 的内容时,控制台被淹没
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- NPP 和 CUDA 错误检查
- 在此程序中获取错误:检查两个数组是否相等
- 错误 ~ 检查字符是否为小写字母
- 同时循环到错误检查 C++
- clang format函数和错误检查在同一行
- 使用宏进行赋值和错误检查
- 在C++中将命令行字符参数解析为int并进行错误检查
- 使用 Makefiles 在 Eclipse CDT 中进行错误检查
- 数据文件处理中的错误检查是否可以打开文件 - 为什么会发生
- 通过错误检查将参数转换为整数
- 这种错误检查方法的性能会不会太高
- C++通过错误检查将sscanf代码改编为distingstream
- 在windows错误检查中使用c++向gmail帐户发送电子邮件
- C++ 卷曲文件下载 - 错误检查
- 通过错误检查将 wstring 转换为双精度的方法
- 如何使用标准库函数通过错误检查将字符串 (char*) 转换为数字