为了开发强壮的程序,需要预见程序在执行时可能的错误,并对错误进行检测和处理以在错误发生时能够采取适当的行为。C语言提供了几个处理错误的函数库。
断言<assert.h>
C语言使用断言监控程序的行为,断言函数声明在<assert.h>
中,原型为:
void assert(int expression);
assert
函数是以宏的形式实现的。参数expression
是一个在正常情况下应该为真的表达式。在执行assert
函数时,会检测expression
的值,如果结果为0(为假),则assert
函数会向标准错误流输出断言失败的信息(包括断言函数的参数、调用断言函数的文件名和断言函数所在行号等信息),并调用abort
函数终止程序。
assert
由于引入了额外的检查,会增加程序的运行时间,有时这是难以接受的,因此可以在程序发布时禁止assert
调用。只需要在包含<assert.h>
前定义宏NDEBUG
即可禁止assert
调用。
由于assert
函数可以被禁止调用,因此不要在assert
函数中包含影响程序行为的内容。
/**************************************
* using_assert.c *
* *
* C语言的错误检测机制:断言 *
**************************************/
#include <stdio.h>
#include <assert.h>
int main()
{
int x;
printf("请输入一个正整数:");
scanf("%d", &x);
assert(x > 0);
printf("输入的数符合要求!\n");
return 0;
}
错误码<errno.h>
标准库中的一些函数在运行时出现错误会向<errno.h>
中的 errno
变量声明一个错误码。 如果要根据errno
判断这些函数是否发生了错误,在调用前需要先将errno
清零。 errno
中存储的值通常为两种,一种是EDOM
,定义域