美好的一天,
我正在阅读我要求维护的一些旧代码,并且我看到了许多类似的函数:
uint32_t myFunc(int* pI);
如果函数体内存在错误条件,则函数会通过返回负errno
值来提前退出,即:return (-EINVAL);
这个值是标准的(即:C99,ANSI),C?我已在评论中读到,显然这样做会将errno
设置为EINVAL
,但我无法找到任何支持此文档的文档。将函数声明为signed int(即:int32_t myFunc(int* pI)
)并将负值视为错误代码,而不是尝试以这种方式设置errno
,这不是更好吗?
答案 0 :(得分:4)
返回否定值不会设置errno
。这是你选择的错误信息(或者更有可能是原作者选择的)在上下文之外: Linux内核系统调用报告错误的机制在范围内返回负值-4095到-1,然后使得系统调用的用户空间代码使用(在大多数情况下)填充errno
的值。但是,如果您想自己设置errno
,只需为其指定一个值。
答案 1 :(得分:1)
解决你的问题:这个值是标准的(即:C99,ANSI),C?
对于C99
"errno which expands to a modifiable lvalue that has type int, the
value of which is set to a positive error number by several library
functions." -- N1256 7.5p2
对于POSIX
"The <errno.h> header shall define the following macros which shall
expand to integer constant expressions with type int, distinct
positive values" -- errno.h DSCRIPTION
"Values for errno are now required to be distinct positive values
rather than non-zero values. This change is for alignment with the
ISO/IEC 9899:1999 standard." -- errno.h CHANGE HISTORY Issue 6
HERE (搜索&#34;何时返回EINVAL&#34;)< / p>