C語言出錯處理
上學的時候寫C代碼(真的是寫,都是寫在紙上的),從沒想過如何處理錯誤。
今天翻書看到,記錄一下。別笑,我能看懂的都是皮毛。
1.使用assert宏,原型如下:
#include <assert.h>
void assert(int expression);
作用機制,如果 expression 為0,則先向stderr輸出錯誤信息,然后調用abort終止程序運行。
assert缺點是影響執行速度,可以使用#define NDEBUG 來禁用assert調用。
2 #define NDEBUG
3 #include <assert.h>
2.使用宏__LINE__和__FILE__在出錯的時候顯示出錯的行號及文件名。
3.使用庫函數
(1). errno 程序出錯時會把errno設置為一個非0的值。(頭文件 errno.h)
(2). abort函數 可以是程序異常退出。 (頭文件 stdlib.h)
(3). exit函數 與abort類似,但在完成清理后才終止,
如果有atexit函數登記的任務,會調用atexit的執行函數 (頭文件 stdlib.h)
(4).atexit函數 登記在程序正常終止時要調用的函數 (頭文件 stdlib.h)
(5).strerror和perror函數,用來打印系統錯誤信息。原型:
2 #include <stdio.h>
3 char *strerror(int errnum);
4
5 /*perror*/
6 #include <stdio.h>
7 #include <errno.h>
8 void perror(const char *s);
4.使用系統日志函數
syslog和openlog
openlog可以用來幫助定位信息在日志文件中的位置。
syslog用來寫入系統日志。syslog可以根據預先定義的級別來寫入日志。一般定義在LOG_ERR 和 LOG_NOTICE之間。
浙公網安備 33010602011771號