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之间。