首页 > 解决方案 > “!错误”返回代码约定在 C 中是否正常?

问题描述

我正在查看一些遗留的 C 源代码,作者定义了一些错误代码枚举,其中包括 ERROR ( -1) 和 SUCCESS ( 0)。然而,在整个代码中,他们使用约定!ERROR作为函数的返回码。

这应该与 SUCCESS ( 0) 有关。

有没有人见过这个?这对你有意义吗?

标签: c

解决方案


使用零表示成功,使用负值通常-1表示失败是一种非常常见的约定。Unix 系统调用广泛使用它(有时使用非负数表示成功,例如,返回文件描述符)。

当然还有其他约定——OpenSSL使用不同的约定,例如:0表示失败和1成功。这样做的好处是您可以编写:

if (OpenSSL_API_Function(arg1, arg2, &arg3))
{
    …continue on success;
}

使用!ERROR而不是0SUCCESSOK不太常见。这当然没有错,因为任何非零值的逻辑否定都是零。作者大概认为 ' !ERROR' 与写作 'no error' 相似,并认为它比SUCCESSor更清楚OK。一般来说,避免否定只是为了好玩;它可能导致复杂的思维。


推荐阅读