【发布时间】:2016-04-10 12:45:38
【问题描述】:
我想知道以下哪种解决方案最好,为什么。
解决方案 1
bool foo(void)
{
if (is_true())
return true; // Error
else
return false; // No error
}
解决方案 2
bool foo(void)
{
if (is_true())
return false; // Error
else
return true; // No error
}
解决方案 3
int foo(void)
{
if (is_true())
return -1; // Error
else
return 0; // No error
}
解决方案 4
size_t foo(void)
{
if (is_true())
return SIZE_MAX; // Error
else
return 0; // No error
}
有人会说一个名为is_raining() 的函数应该在不下雨的时候返回false,但是bash 一个返回0 的程序意味着成功。负值通常被认为是错误,但是我怎么知道我应该如何处理我的返回码?
if(foo())
printf("Error\n");
if(!foo())
printf("Error\n");
if(foo() < 0)
printf("Error\n");
【问题讨论】:
-
这是上下文问题。就像你说的,像
is_raining这样的函数在下雨时应该返回true,否则返回false,但是对于像calculate_some_number这样的函数返回true 或false 是没有意义的。但是,如何从返回布尔值的函数中返回错误?在 C 中,传统方法是返回int并使用0表示“假”,1表示“真”,-1表示“错误”。最后,这取决于你,主要是你记录它,并且你是一致的。 -
和一个名为
is_sunny_day的函数在下雨时不应该返回 true - 您选择的foo()并没有真正告诉我们它应该返回什么;一个'foo',也许?如果<condition>为真,则名为is_<condition>的函数应该返回一个非零值——因为这样你就可以编写if——像if (is_raining()){...}这样的语句。 -
另外,您的所有示例仅返回 两个 案例 - 某些情况是真的,或者发生了错误。在现实生活中,几乎总是有三个——
is_raining()可能需要返回true、false和“不知道,百叶窗关闭” -
没有一个选项可以被认为是“最好的”或实际上是“最差的”,因为没有一个选项适用于所有功能。主要考虑的是错误值必须与任何有效的返回值区分开来。
标签: c error-handling