【发布时间】:2014-08-26 01:08:14
【问题描述】:
早安,
我正在阅读一些我被要求维护的旧代码,我看到了一些类似这样的函数:
uint32_t myFunc(int* pI);
在函数体内出现错误情况的情况下,函数通过返回一个负的errno值提前退出,即:return (-EINVAL);
这个值标准(即:C99、ANSI)、C 吗?我在 cmets 中读到显然这样做会将errno 设置为EINVAL,但我找不到任何文档来支持这一点。将函数声明为有符号整数(即:int32_t myFunc(int* pI))并将负值视为错误代码,而不是尝试以这种方式设置errno,不是更好吗?
【问题讨论】:
-
我认为无论如何都不会返回任何错误...我认为您的负整数将被转换为无符号(负整数的相同二进制表示将用于您分配的无符号值)
-
我想是的。使用正数这个地方很奇怪。至少它违反了 linux 约定。
-
这是内核代码吗?
-
对于这个 interesting 函数,当然
myFunc()返回值 0 ... 0xFFFFFFFF-4096 是“正常”返回值,而 0xFFFFFFFF-4096+1 ... 0xFFFFFFFF 是"错误值。 -
@KeithThompson 不,这不是内核代码。