您的位置:首页 > 其它

<errno.h>的简单使用

2015-10-06 00:00 330 查看
标准库中的一些函数通过向<errno.h>中声明的int类型errno变量存储一个错误码(正整数)来表示有错误发生.(errno可能实际上是个宏.如果是宏,C标准要求它表示左值,以便可以像变量一样使用.)大部分使用errno变量的函数集中在<math.h>,但也有一些在标准库的其他部分.

假设我们需要使用一个库函数,该库函数通过给errno赋值来产生程序运行出错的信号.在调用这个函数之后,我们可以检查errno的值是否为零,则表示在函数调用过程中有错误发生.举例来说,假如需要检查sqrt函数的调用是否出错,可以使用类似下面的代码:

errno = 0;
y = sqrt(x);
if (errno != 0 )
{
fprintf(stderr,"sqrt error; program terminated.\n");
exit(EXIT_FAILURE);
}

当使用errno来检测库函数调用中的错误时,在函数调用前将errno置零非常重要.虽然在程序刚开始运行时errno的值为零,但有可能在随后的函数调用中已经被改动了.库函数不会将errno清零,这是程序需要做的事情.

erron中定义了100多种错误消息.详细可以看<errno.h>这个文件

perror函数和strerro函数

void perror(const char *s); //来自<stdio.h>

char *strerror(int errnum); //来自<string.h>

下面看两个变量errno有关的函数,不过这两个函数都不属于<errno.h>

一个使用perror的例子:

errno = 0;
y = sqrt(x);
if (errno!= 0)
{
perror("sqrt error");
exit(1);
}

如果sqrt调用因定义域错误而错误,perror会产生如下输出:

sqrt error:Numrical argument of domin

strerror的函数属于<string.h>.当以错误码为参数调用时,函数会返回一个指针,它指向一个描述这个错误的字符串.例如,调用

puts(strerror(EDOM));

可能会显示

Numerial result out of domain.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: