C语言 错误处理
-
错误处理
C语言不提供对错误处理的直接支持,但作为一种系统编程语言,它以返回值的形式提供了较低级别的访问。大多数C甚至Unix函数调用在出现任何错误时返回-1或NULL,并设置错误代码errno。它被设置为一个全局变量,并指示在任何函数调用期间发生的错误。您可以在error.h头文件中找到各种错误代码。因此,C程序员可以检查返回值,并根据返回值采取适当的操作。在初始化程序时将errno设置为0是一个很好的实践。值0表示程序中没有错误。 -
errno,perror()和strerror()
C编程语言提供了perror()和strerror()函数,可用于显示与errno关联的文本消息。perror()函数显示了传递给它的字符串,后面跟着冒号,一个空格,那么当前错误值的文本表示。strerro()函数,该函数返回一个指针,当前错误值的文本表示。让我们尝试模拟一个错误情况,并尝试打开一个不存在的文件。在这里,我同时使用这两个函数来显示用法,但是您可以使用一种或多种方式打印错误。要注意的第二点是您应该使用stderr文件流输出所有错误。
尝试一下#include <stdio.h> #include <errno.h> #include <string.h> extern int errno ; int main () { FILE * pf; int errnum; pf = fopen ("unexist.txt", "rb"); if (pf == NULL) { errnum = errno; fprintf(stderr, "Value of errno: %d\n", errno); perror("Error printed by perror"); fprintf(stderr, "Error opening file: %s\n", strerror( errnum )); } else { fclose (pf); } return 0; }
编译并执行上述代码后,将产生以下结果-Value of errno: 2 Error printed by perror: No such file or directory Error opening file: No such file or directory
-
除以零错误
一个普遍的问题是,在除以任何数字时,程序员不会检查除数是否为零,最终会产生运行时错误。下面的代码通过在除法之前检查除数是否为零来解决此问题-
尝试一下#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 0; int quotient; if( divisor == 0){ fprintf(stderr, "Division by zero! Exiting...\n"); exit(-1); } quotient = dividend / divisor; fprintf(stderr, "Value of quotient : %d\n", quotient ); exit(0); }
编译并执行上述代码后,将产生以下结果-Division by zero! Exiting...
-
程序退出状态
通常的做法是,在成功操作后程序退出后,使用EXIT_SUCCESS值退出。在这里,EXIT_SUCCESS是一个宏,它定义为0。 如果您的程序中存在错误情况,并且您要退出程序,则应以状态EXIT_FAILURE定义为-1退出。因此,让我们将上述程序编写如下:
尝试一下#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 5; int quotient; if( divisor == 0) { fprintf(stderr, "Division by zero! Exiting...\n"); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr, "Value of quotient : %d\n", quotient ); exit(EXIT_SUCCESS); }
编译并执行上述代码后,将产生以下结果-Value of quotient : 4