C语言标准库中包含了各种用于处理错误的函数和宏。1、assert( ) 宏 #include<assert.h>void assert( int expression );可用于诊断程序bug。expression可以是任何要检测的东西:变量或任何表达式。如果expression为TRUE,则assert()不执行任何操作;否则在stderr上显示一条错误消息,并终止程序的执行。例:assert( x >= 0);为使assert( )宏发挥作用,编程程序必须采用调试模式。以后以发行模式编译程序的最后版本时,assert()将被禁用。assert( )采取的动作取决于另一个名为NDEBUG宏(表示“不调试”)。如果NDEBUG宏未被定义(默认情况),则assert( )将处于活动状态;否则assert( )将被关闭,因此不起作用。定义NDEBUG宏的代码如下: #define NDEBUG2、头文件errno.h头文件errno.h定义了几个宏,用于定义和记录运行错误。这些宏将结合函数perror( )一起使用。头文件errno.h定义了一个名为errno的外部int变量。如果执行时发生错误,C语言函数库中的很多函数都将一个值赋给该变量。头文件errno.h定义的符号错误常量名称 值 消息和含义E2BIG 1000 参数列表过长(超过128字节)EACCES 5 没有权限(如,试图写一个为只读的文件)EBADF 6 文件描述符无效EDOM 1002 数学参数超出范围(将一个不允许的值作为参数传递给数学函数)EEXIST 80 文件已经存在EMFILE 4 打开过多的文件ENOENT 2 没有这样的文件或目录ENOEXEC 1001 执行格式错误ENOMEM 8 内存不够(如没有足够内存执行exec()函数)ENOPATH 3 路径未找到ERANGE 1003 结果超出范围(如数学函数值过大)可以以两种方式来使用errno。有些函数通过其返回值来指出发生了错误。在这种情况下,可以通过检测errno的值来确定错误的性质,并采取相应的措施。如果无法知道是否发生了错误,可以检测errno。如果它不为0,则说明发生了错误,而errno的值指出了错误的性质。处理完错误后,一定要将errno的值重置为0。3、perror( )函数 #include<stdio.h> void perror( const char *msg );perror( )函数是C语言中另一个错误处理工具,该函数在stderr上显示一条消息,指出库函数调用或系统调用期间,最后发生的一个错误。函数首先打印msg指向的一条可选的、用户定义的消息,然后是冒号以及实现定义的、描述最后发生的错误消息;如果没有错误,则显示no error。函数不会根据错误来采取某种措施。
时间: 2024-11-05 21:35:52