C语言:错误处理
这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开
如何学好一门编程语言
- 掌握基础知识,为将来进一步学习打下良好的基础。
- 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
- 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了
C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。
在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个 错误代码 errno ,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 errno.h 头文件中找到各种各样的错误代码。
所以,我们可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有错误。
错误处理相关函数
perror("字符串") 打印: 字符串: 当前errno值的文本表示形式
strerror(errno) 返回一个指针,指针指向当前errno值的文本
案例:打开一个不存在的文件。使用上面的函数来输出错误消息,另外有一点需要注意,我们使用 fprintf 的时候应该使用 stderr 文件流来输出所有的错误。
#include <stdio.h> #include <errno.h> #include <string.h> extern int errno; // 只声明但不定义,errno在其他文件中已经定义了 int main(){ FILE* pf; // 声明文件类型的指针 int errnum; pf = fopen("unexist.txt", "rb"); if (pf == NULL){ errnum = errno; fprintf(stderr, "错误号: %d\n", errno); //错误号: 2 perror("通过 perror 输出错误"); //通过 perror 输出错误 : No such file or directory fprintf(stderr, "打开文件错误: %s\n", strerror(errnum)); //打开文件错误 : No such file or directory } else{ fclose(pf); } return 0; }
在进行除法运算时,因此我们可以提前检查 分母 是否为零,避免运行时错误。

#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 0; int quotient; if( divisor == 0){ fprintf(stderr, "除数为 0 退出运行...\n"); // 除数为 0 退出运行... exit(-1); } quotient = dividend / divisor; fprintf(stderr, "quotient 变量的值为 : %d\n", quotient ); exit(0); }
如果 程序运行工程,会返回宏 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, "除数为 0 退出运行...\n"); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr, "quotient 变量的值为: %d\n", quotient ); exit(EXIT_SUCCESS); }

quotient 变量的值为 : 4