Home C&C++函数库 c++ 语法 程序源码 Linux C库

errno

宏  <cerrno>

int

最终错误码

这个宏扩展为int类型的可修改左值。因此,程序既可以读取它,也可以修改它。
errno在程序启动时设置为零,标准C库中的任何函数都可以将其值修改为不同于零的值, 通常是为了提示特定类型的错误(没有库函数在更改后将其值设置为零)。
程序也可以修改它的值。事实上,如果这个变量用于库函数调用后的错误检查,那么在调用之前, 程序应该将它重置为零(因为之前对库函数的任何调用都可能改变了它的值)。
声明errno (<cerrno>)的头文件至少还声明了以下宏常量,它们的值不等于0:
当errno设置为该值时
EDOM 域错误 : 一些数学函数只被定义为特定的实值,这被称为它的域, 例如,sqrt函数只被定义为非负数,因此, 如果用一个负参数调用sqrt函数, 则将errno设置为EDOM。
ERANGE 范围错误 : 变量可以表示的值的范围是有限的。例如, 像pow这样的数学函数很容易地超出浮点变量所表示的范围, 或者像strtod这样的函数可以遇到比范围所表示的值更长的数字序列。 在这些情况下,errno被设置为ERANGE。
EILSEQ 非法序列 : 多字节字符序列可能有一组受限制的有效序列。 当一组多字节字符被mbrtowc等函数编译时,当遇到无效序列时, errno被设置为EILSEQ。

标准库的函数可以将errno设置为任意值(不仅仅是上面列出的可移植值)。 特定的标准库实现可以在这个头文件中定义额外的名称。

c++ 11扩展了这个头文件中需要定义的基本值集,包括了POSIX环境中也可用的许多名称, 将可移植errno值的总数增加到78。有关完整列表,请参见errc。

与errno值关联的特定错误消息可以使用strerror获取, 也可以直接使用perror函数打印。

在c++中,errno总是声明为宏,但在C中,它也可以实现为具有外部链接的int对象。

🍄  数据竞争



支持多线程的库应该在每个线程的基础上实现errno:每个线程都有自己的本地errno。

这符合C11和c++ 11标准的库的要求。

联系我们 免责声明 关于CandCplus 网站地图