我经常看到通过测试小于零而不是显式定义来检查来自 POSIX 函数的错误的代码,并且通常唯一的错误代码使用 -1。那是ret = function();if (ret < 0) { ...}对比ret = function();if (ret == -1) { ...}第一次练习有什么目的吗?在某些架构上,与 0 比较是否比与 -1 比较快?如果现在定义的唯一错误代码是 -1,C 或 POSIX 标准是否保证第一个替代方案将来不会中断?如果不是,是否应该将其视为不良做法? (我想大多数函数不太可能以这种方式更改,从而导致许多已经编写的代码被破坏?)。编辑:为了使问题更清楚:我只谈论专门返回 -1 作为标准定义的错误代码的函数。我知道有些人没有。我在很多地方看到了对这些函数的 最佳答案 这主要是历史事故。曾经有(POSIX 之前的)类 UNIX 系统在错误时返回 -errno 而不是 -1,因此您不必使用全局 errno 变量。因此,检查 您仍然可以在 Linux 中看到此历史记录——系统调用返回 -errno,C 库检查 [-4096..-1] 范围内的值。如果返回值在该范围内,库将否定它并将其存储在 errno(内核不知道)中,然后返回 -1。关于C 检查标准库中的错误(ret < 0 vs ret == -1),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21684292/
10-15 07:44