C语言错误处理

C语言错误处理

1、什么是错误处理?

程序错误是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。错误处理程序是指软件系统中用于处理错误的程序。在编程语言中,错误处理模型一般可以分为:返回值模型、全局错误标志模型、恢复性模型和限制性模型。

2、C语言的错误处理

C程序员没有异常机制,一般用返回值标识错误,判断返回值进行错误的处理。

2.1 返回值表示出错的常见情况

1、如果函数返回值是int ,并且返回的数据不可能是负数,直接返回-1表示出错,非负数代表正常返回数据。

2、如果函数返回值是int ,但返回的数据也可能是负数;返回0代表正常,-1代表出错。用指针类型的参数带出返回的数据。

3、如果函数返回值是指针类型,返回NULL(0)代表出错,其他代表正常。

4、如果函数不需要考虑出错情况,可以用void返回值。

注:以上4中情况,不是绝对的,只是经验的总结。比如:有些时候,返回-1代表错误的指针。

2.2 C标准的错误处理

C标准中,对于错误处理提供了一个全局变量和3个函数:

全局变量:

errno --外部的全局变量,用于储存错误的编号。

函数:

strerror()/perror()/printf() 都可以把错误的编号变成错误的信息。

1、strerror()  --传入一个错误的编号,返回一个错误的信息

2、perror()    --打印当前的错误信息(自动查找errno得到的错误编号)

3、printf("%m")    --打印当前错误信息(自动查找errno)

errno的值,在调用函数时,如果函数出错,errno就会改变;但在调用函数时,如果不出错,errno的值不变。因此,不能用errno判断某个函数是不是出错,只能通过函数的返回值判断是否出错。errno的作用是出了错之后,获得具体的错误信息。

注:errno不是所有的函数都使用,某些函数没有使用(线程)

示例:

fopen("a.txt") perror("opena");

fopen("b.txt") perror("openb");

你可能感兴趣的:(c语言)