C语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据,在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误
errno
errno
:头文件errno.h
定义的一个全局变量,记录了函数调用发生错误时的错误码,int类型,0表示没有错误void perror(char *msg)
:头文件stdio.h
中定义的函数,用于抛出最近的一次系统错误信息char *strerror(int errnum)
:头文件string.h
中定义的函数,用来依参数errnum的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(void){
FILE *fp = fopen("unexist.file", "rb");
if(fp == NULL){
fprintf(stderr, "error code: %d\n", errno);
fprintf(stderr, "error code detail: %s\n", strerror(errno));
perror("error detail");
}else{
fclose(fp);
}
return 0;
}
1
2
3
4
5
6
$ gcc a.c
$ ./a.out
error code: 2
error code detail: No such file or directory
error detail: No such file or directory
程序退出状态
通常情况下,程序成功执行完一个操作正常退出的时候会带有值 EXIT_SUCCESS
,在这里,EXIT_SUCCESS
是宏,它被定义为 0
如果程序中存在一种错误情况,当您退出程序时,会带有状态值 EXIT_FAILURE
,被定义为 -1