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>包含的頭文件中定義了宏NDEBUGassert什麼都不會做。如果沒有,將會比較參數是否和0相等,如果相等,將會輸出標準錯誤輸出的一些診斷信息,並且調用std::abort。診斷信息包括該表達式,標準宏__FILE____LINE__的值,還有標準函數__func__

cerrno

其中有一個宏變量errno,還有許多宏常量

errno:記錄錯誤代碼,其取值可以爲以下的宏(除了ERANGEEDOM,其餘均爲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:設備上沒有剩餘空間

ENOSRNo 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:交叉連接



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章