你好,
我正在阅读一些我被要求维护的旧代码,我看到了一些类似这样的函数:
uint32_t myFunc(int* pI);
如果函数体内出现错误情况,函数会通过返回负的 errno
值提前退出,即:return (-EINVAL);
这个值标准(即:C99、ANSI)是C吗?我在评论中读到显然这样做会将 errno
设置为 EINVAL
,但我找不到任何文档来支持这一点。将函数声明为带符号的 int(即:int32_t myFunc(int* pI)
)并将负值视为错误代码,而不是尝试设置 errno 会更好吗
以这种方式?
最佳答案
返回负值不会设置errno
。这是您在上下文之外获取的(或者更可能是原作者获取的)错误信息:Linux 内核系统调用 报告错误的机制正在返回范围内的负值-4095 到 -1,进行系统调用的用户空间代码然后使用(在大多数情况下)填充 errno
的值。但是,如果您想自己设置 errno
,只需为其分配一个值即可。
关于C - 返回负值作为无符号集 errno?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489522/