该系列博文主要参考自 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:交叉连接