1

我有一个函数应该告诉我资源是否存在。这个函数应该在存在时返回 0,在不存在时返回 1,在错误时返回 -1,还是应该在存在时返回 0,在不存在时返回 -1/错误?

博多

4

3 回答 3

6

如果函数设计为布尔值,如名称所示is_file_present(),则在资源存在时应返回 1,以便可以在测试中使用,例如:

if (is_file_present(...))
    ... open file ...

if (!is_file_present(...))
    ... print an error ...

另一方面,如果函数的真正目的是它的副作用,并且它的结果用于表明它们的成功,则可以在无错误情况下返回 0 并在出现错误代码时返回错误代码,例如 -1错误。例如:

if (create_resource(...) == 0)
    ... resource has been created ...
else
    ... handle error ...

将 -1 用于错误代码允许对返回项目计数或索引的函数使用相同的错误约定。

于 2013-07-13T09:20:04.740 回答
0

就像其他人说的那样,这与风格有关。您可以更喜欢在不存在时返回 0,在存在时返回 1。同样对于错误,您可以在函数签名中添加错误或异常指针指针(** 双星)参数以指示失败。它可以是一个简单的布尔值或整数,也可以是一个包含有关失败的详细信息的结构。就像错误代码和消息一样。这种模式在 Objective-C 框架中经常出现。同样AFAIK在c中没有异常堆栈,因此这种方法可能是最干净的方法。我想写一些示例代码,但我在移动设备上。我希望这有帮助。

于 2013-07-13T10:41:21.903 回答
0

如果您的编译器不是过时的并且您可以使用 C99 标准,则可以使用标头stdbool.htrue在资源存在和false资源不存在时返回。恕我直言,这要干净得多。

于 2013-07-13T11:03:44.247 回答