0

当我编写用户定义函数时,如果函数成功,我应该返回 0 还是非空值?

如果我的函数成功,我个人喜欢返回 0,但我总是看到错误处理越来越(!var)(var != NULL). 1那么TRUE即使在非布尔情况下返回一些值会更好吗?

Stack Overflow 有什么建议?

我问的原因是因为我写了一个非布尔包装器WINAPI BOOL CreateProcessW,它把我的代码扔掉了,因为我returning 0在包装器中并且在我检查 if 之前TRUE

4

3 回答 3

1

我发现在成功时返回非零值更容易,因为你可以这样说:

int result = foo()
if (!result) { .. }

这在意图上更加清楚。通常在异常或错误情况下返回 NULL,因此在成功时返回 NULL 是违反直觉的。

但是,更好的解决方案是对所有错误代码使用枚举并检查这些错误代码,而不是使用类似!result. 当有多个错误代码时,这也可以让您很好地处理这种情况。

于 2012-06-18T20:00:30.517 回答
0

我会说只选择一个并保持一致。如果您正在以重要的方式使用其他应用程序,请尝试与该代码保持一致。

我喜欢在成功时返回 0,然后在不同的错误条件下使用非零数字。如果你使用 0 作为你的错误,那么你只能有一种返回的错误,而不会进入更复杂的错误处理。但是检查 !foo() 似乎违反直觉。

于 2012-06-18T20:09:11.023 回答
0

这是一个非常主观的问题,但一般来说,我建议返回枚举错误代码并明确检查您期望的条件。这样可以避免诸如您发现自己所处的情况。

不过,一致性比任何一种方案都重要。

于 2012-06-18T20:09:19.587 回答