我刚接触C语言,关于全局整型变量errno
的问题:它的类型是int
,取值范围是1到124,既然它的值不能为负数,那么为什么它的类型不是unsigned int
呢?
我刚接触C语言,关于全局整型变量errno
的问题:它的类型是int
,取值范围是1到124,既然它的值不能为负数,那么为什么它的类型不是unsigned int
呢?
int
类型,而不是因为某种理由。在恐龙行走地球时代,C语言没有很好的类型系统,但将所有东西都视为int
类型。随着语言的发展和最终的标准化,类型系统变得不那么粗糙,但很多旧函数保留了int
类型的API。(例如还有另一个旧的int
常量EOF
,这反过来影响了很多函数的API,如getchar
和ctype.h
函数。)errno
定义的位置和它的类型,请参见C17 7.5(errno.h)
errno
扩展为具有类型int
和线程本地存储持续时间的可修改lvalue
关于其值的唯一保证是:
请注意,它所说的是非零而不是正数。有一些预定义的宏,如EDOM、EILSEQ、ERANGE,保证是正int,但errno不仅限于这些值。实现(编译器和系统)可能定义更多的值,如Linux等。你提到的1到124的范围是特定于Linux的,但C中没有阻止其他实现使用不同的范围或负数。程序初始线程中
errno
的值为零,但任何库函数都不会将其设置为零。库函数调用可能会将errno
的值设置为非零值...