C语言中的“!ERROR”返回代码约定是否正常?

时间:2019-04-27 19:16:02

标签: c

我正在浏览一些旧的C源代码,并且作者定义了一些错误代码枚举,其中包括ERROR(-1)和SUCCESS(0)。但是,在整个代码中,他们将约定!ERROR用作函数的返回代码。

这大概与成功(0)有关。

以前有人看过吗?对您来说有意义吗?

1 个答案:

答案 0 :(得分:4)

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

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

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

使用!ERROR而不是0SUCCESSOK的情况较少。当然,这是正确的,因为任何非零值的逻辑取反为零。作者大概认为“ !ERROR”类似于写“没有错误”,并且认为它比SUCCESSOK更清晰。通常,为了娱乐而避免否定;会导致思维混乱。