编码范式:如果功能成功,我应该返回0吗?

时间:2012-06-18 19:58:08

标签: c paradigms

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

如果我的功能成功,我个人喜欢返回0,但我总是看到错误处理更像(!var)而不像(var != NULL)。那么即使在非布尔情况下,返回一些像1这样的值,如TRUE更好吗?

Stack Overflow建议什么?

我之所以问的原因是因为我为WINAPI BOOL CreateProcessW编写了一个非布尔包装器并且它抛弃了我的代码,因为我在包装器中是returning 0并且在我检查{{1}之前}}

3 个答案:

答案 0 :(得分:1)

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

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

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

但是,更好的解决方案是对所有错误代码使用枚举,并检查这些错误代码,而不是使用!result之类的内容。这可以让您在有多个错误代码的情况下处理这种情况。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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