C++标准库 Error handling cassert cerrno

该系列博文主要参考自 cppreference.com 和 cplusplus.com
由于博主水平有限,内容仅供参考


cassert 

其中只有一个宏函数assert

#ifdef NDEBUG
#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/
#endif

NDEBUG并未在标准库中定义,如果<cassert>包含的头文件中定义了宏NDEBUG,assert什么都不会做。如果没有,将会比较参数是否和0相等,如果相等,将会输出标准错误输出的一些诊断信息,并且调用std::abort。诊断信息包括该表达式,标准宏__FILE__和__LINE__的值,还有标准函数__func__。

cerrno

其中有一个宏变量errno,还有许多宏常量

errno:记录错误代码,其取值可以为以下的宏(除了ERANGE和EDOM,其余均为c++11新添加的)

E2BIG:参数列表太长

EACCES:拒绝访问

EADDRINUSE:地址在使用中

EADDRNOTAVAIL:地址不可用

EAFNOSUPPORT:Address family not supported (不支持的地址族?)

EAGAIN:资源不可用,再来一次

EALREADY:已在程序中连接

EBADF:无效的文件

EBADMSG:错误的信息

EBUSY:设备或资源忙

ECANCELED:已取消操作

ECHILD:没有子进程

ECONNABORTED:连接失败

ECONNREFUSED:连接拒绝

ECONNRESET:连接重置

EDEADLK:发生资源死锁

EDESTADDRREQ:Destination address required 

EDOM:参数数值超出范围

EEXIST:文件存在

EFAULT:错误的地址

EFBIG:文件过大

EHOSTUNREACH:主机不可连接

EIDRM:标识符已删除

EILSEQ:非法的字节序列

EINPROGRESS:操作正在进行

EINTR:函数中断

EINVAL:非法参数

EIO:I/O错误

EISCONN:套接字被连接

EISDIR:是一个目录

ELOOP:过多层次的符号连接

EMFILE:文件描述符的值过大

EMLINK:连接过多

EMSGSIZE:消息过大

ENAMETOOLONG:文件名过长

ENETDOWN:网络已关闭

ENETRESET:网络连接中断

ENETUNREACH:网络不可连接

ENFILE:在系统中打开了过多文件

ENOBUFS:没有缓冲区可用

ENODATA:无消息可用

ENODEV:未找到设备

ENOENT:未找到文件或目录

ENOEXEC:可执行文件格式错误

ENOLCK:没有可用的锁

ENOLINK:连接已断开

ENOMEM:内存不足

ENOMSG:无所需类型的信息

ENOPROTOOPT:协议不可用

ENOSPC:设备上没有剩余空间

ENOSR:No STREAM resources 

ENOSTR:不是一个STREM

ENOSYS:函数不支持

ENOTCONN:套接字没有连接

ENOTDIR:不是一个目录

ENOTEMPTY:目录非空

ENOTRECOVERABLE:状态不可恢复

ENOTSOCK:不是一个套接字

ENOTSUP:不支持

ENOTTY:不合适的I/O控制操作

ENXIO:没有此设备或地址

EOPNOTSUPP:在套接字中不支持该操作

EOVERFLOW:对于此数据类型,值过大

EOWNERDEAD:之前的所有者消亡

EPERM:不允许该操作

EPIPE:管道被损坏

EPROTO:协议错误

EPROTONOSUPPORT:协议不支持

EPROTOTYPE:对于套接字,协议类型错误

ERANGE:结果过大

EROFS:只读文件系统

ESPIPE:无效寻找

ESRCH:没有该进程

ETIME:ioctl()超时

ETIMEDOUT:连接超时

ETXTBSY:文本文件忙

EWOULDBLOCK:操作将被阻止

EXDEV:交叉连接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值