C - 返回负值作为无符号集 errno?

标签 c unsigned errno

你好,

我正在阅读一些我被要求维护的旧代码,我看到了一些类似这样的函数:

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/

相关文章:

c++ - 标准 C++ 库中 size_t 的有符号变体

c++ - OpenCV的Bayer转换使用什么算法?

c - 如何使用android ndk在android中旋转图像

c - 如何在 C/C++ 中打印这个系列 x-(x^3/3!)+(x^5/5!)-(x^7/7!)+...(x^n/n!)?

c - 显示非常大的数字

c++ - 在 size_t 中使用负整数是否安全?

python - 奇怪的 Errno 48 地址已在使用行为 python

errno - 扔,返回还是错误?

c++ - 用户定义的 errno 范围值(POSIX 或特定于 Linux)

c - 该函数需要多少字节?