我在C函数中的错误应该返回什么?

时间:2010-02-07 15:27:00

标签: c error-handling return-value error-code

目前我在C中的自定义函数中返回-1,如果发生错误,0表示成功。例如,使用链表和某些功能需要非空列表才能正常工作。如果作为参数传递的列表为空,则返回-1(错误),如果它不为空则返回0,并且函数没有问题。

我是否应该返回1而不是-1?

这是用C做事的标准方式还是你推荐一种不同的方法?

4 个答案:

答案 0 :(得分:8)

返回非零值以指示失败。这样你就可以编写函数调用:

if(func_call())
{
    doErrorHandling();
}

此约定允许您使用任何!0值来指示特定错误,这将允许您以统一的方式使用一个变量。因此,上面示例中显示的if的主体可以使用switch语句来处理特定错误。

你可以采用不同的方式 - 但如果你选择坚持一个约定 - 不幸的是win32 API(以及我使用的其他API)混合和匹配约定。

答案 1 :(得分:2)

听起来不错。 -1用于I / O函数,因为正返回值通常表示成功,并且是处理的字节数。如果您有多种方法可能会出错,那么您可以返回不同的整数或设置全局错误变量(标准库使用errno)来包含错误代码。

在风格方面,我不想返回状态代码,因为这意味着我的功能不能(干净地)返回任何其他内容。相反,我会在调用函数之前检查输入。但这是主观的,取决于背景。

答案 2 :(得分:-1)

我建议您找到一种方法来格式化一个信息丰富的人类可读字符串在错误点,其中所有信息仍然可用,并设计一种方法来降低它程序的其余部分,通过用户,他的手机,到您的开发团队进行分析。

在我看来,这似乎是任何设计的一个重要特征,如果你想更快地生产更好的软件。在途中杀死错误信息是一个重大犯罪,C语言是没有理由的。

答案 3 :(得分:-5)

有很多计划 - 但无论你做什么,都要坚持不懈!

如果您没有很多失败的条件,只需使用0表示错误。那是因为错误测试是以一种简单的方式编写的:

if (!list_insert(...)) { handle_error; }

否则低于零的答案可以与正常答案> = 0一起使用。您可以将此用于列表长度等功能,在正常情况下不会为负。或者,如果您需要许多错误代码(-1 - 不存在,-2 - 未找到,-3 ......,...)