为什么错误代码无效?


12

我经常在C代码中看到返回的错误代码,例如return -EINVAL而不是return EINVAL。为什么要使用否定?

c 

Answers:


8

在许多UNIXen上,syscall的约定是:如果发生错误,它们将返回取反的错误代码;如果成功,则返回实际值。

在用户空间一侧,将其转换-1为正错误代码为的错误errno,如果成功,则为实际值。

之所以需要双重使用返回值,是因为用这种语言进行多次返回很麻烦,因为您必须求助于传递输出参数来保存最终的错误。


4

这是一个惯例;许多函数在成功时返回肯定的肯定结果,而在失败时返回否定的结果。最初,它与Unix进程的返回码有关。0表示成功。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.