如何设置错误处理语句的格式
How are error-handling statements formatted?
我有几个函数,如果遇到错误,则返回1。每个函数调用一个较低级别的函数,这样,如果较低级别的函数返回 1,则原始函数也返回 1。因此,错误以这种方式传递到链条上。
以下是这些函数之一的高度删节版本:
if (low_level_function()) {
[do stuff]
return 1;
}
[do other stuff]
return 0;
我是否应该声明一个错误变量,将 low_level_function() 的结果分配给它,然后在 if() 语句中使用错误变量?换句话说:
int error = low_level_function();
if (error) {
[do stuff]
return 1;
}
[do other stuff]
return 0;
还是有另一种更好的方法可以做到这一点?我以前从未编写过代码来解释错误,所以我在这里的经验相当有限。
编辑:我重新格式化了函数,以更好地传达我的代码的性质。
首选第二种形式的一个原因是,当您在错误情况下无事可做并且希望避免嵌套 if 语句的阶梯效应时。
int error_flag = low_level_function();
if (!error_flag)
error_flag = second_function();
if (!error_flag)
error_flag = third_function();
return error_flag;
当然,对于该特定示例,您可以使用||
的短路属性来真正简化:
return low_level_function() || second_function() || third_function();
我
看不出上述两种方法之间的区别。
我会使用例外,更干净的方法重新评论。 为什么要重新发明轮子?您可以使用标准异常或实现自定义异常,如
你也可以使用它,
return low_level_function();
如果 low_level_function() 在错误时返回非零值,在成功时返回零。或
return low_level_function()>0? 1 : 0;
虽然这是侧面评论,但我会首先声明我更喜欢任何方法的一个出口。
他的构造的一个主要优点是可能只需要在一个地方使用错误日志记录语句。
此外,添加用于调试海豚的跟踪日志也非常容易。
所以按照这个想法,我会提出以下建议
#define OK (0)
int mid_level_func(....)
{
log_entry(...);
int rc = OK
{
...
if ((rc = low_level_func1(...)))
goto lblExit;
...
if ((rc = low_level_func2(...)))
goto lblExit;
...
lblExit:
;
}
if (OK != rc)
log_error(rc, ...);
log_exit(...);
return rc;
}
对于那些坚持goto
"邪恶"的人来说,上述方案的以下变体可能会有所帮助:
#define OK (0)
int mid_level_func(....)
{
log_entry(...);
int rc = OK
do
{
...
if ((rc = low_level_func1(...)))
break;
...
if ((rc = low_level_func2(...)))
break;
...
} while (0);
if (OK != rc)
log_error(rc, ...);
log_exit(...);
return rc;
}
相关文章:
- 有人可以解释一下吗?这是关于数组和数组内部 if 语句的一些处理
- 在 if 语句中处理多个 or 的更优雅的方法是什么
- 如何处理托管C++ (/CLR) 中 #using 语句中的错误
- 如果/else-if语句将如何处理此操作
- 谁能帮我处理C++中的语句和字符串
- 可以使用switch语句处理的最大事例数
- openMP 用于循环增量语句处理
- 如何设置错误处理语句的格式
- C++中的错误处理-试图返回到指定的语句
- 如何处理鼠标点击逻辑的许多嵌套if语句
- c++编译器如何处理在条件语句中声明的类型
- 使用If语句处理布尔值
- libneo4j_client. c++中的预处理语句
- 为什么c++中的if语句不能处理多个条件
- 这段c++代码是如何处理不寻常的单个布尔语句的?
- 构造函数的function-try-block处理程序中的返回语句
- 组织sqlite3 C/ c++预处理语句(避免全局代码混乱)
- 编译时断言,当并非所有枚举值都在 C++ 的 switch 语句中处理时
- 包含预处理指令的多行宏语句
- MySQL连接器中的预处理语句