C 标准库 - <errno.h>

C 标准库的 errno.h 头文件它主要是定义了errno整数变量,errno.h 头文件里面是通过系统来调用设置,就如在错误事件中的某些库函数表明了什么发生了错误。该宏扩展为类型为 int 的可更改的左值,因此它可以被一个程序读取和修改。

对于errno的值设置刚开始是为0,也可以在适当的时候修改它的值或重置。errno.h 头文件也顶了以一系列表示不同错误代码的宏,这些宏应扩展为类型为 int 的整数常量表达式。

接下来就看看errno.h头文件中定义的宏有哪些:

extern int errno

这是通过系统调用设置的宏,在错误事件中的某些库函数表明了什么发生了错误。

(1)这个宏的声明为:

extern int errno

(2)NA既是他的参数,也是返回值。我们用实例来深入了解他的用法。

(3)例子:

#include #include #include

extern int errno ;

int main (){

  FILE *fp;

  fp = fopen("file.txt", "r");

  if( fp == NULL )

    {

       fprintf(stderr, "Value of errno: %d\n", errno);

       fprintf(stderr, "Error opening file: %s\n", strerror(errno));

    }

    else

     {

       fclose(fp);

    }

    return(0);
}

结果:

Value of errno: 2Error opening file: No such file or directory

EDOM Domain Error

这个宏表示一个域错误,它在输入参数超出数学函数定义的域时发生,errno 被设置为 EDOM

(1)下面是 EDOM 宏的声明。

#define EDOM some_value

(2)参数和返回值跟前面说的那个是一样的

(3)用法的例子:

#include
#include
#include

int main(){

   double val;

   errno = 0;

   val = sqrt(-10);

   if(errno == EDOM)

    {

      printf("Invalid value \n");

    }

     else

    {

      printf("Valid value\n");

    }

   errno = 0;

   val = sqrt(10);

   if(errno == EDOM)

      {

       printf("Invalid value\n");

     }

     else

    {

     printf("Valid value\n");

    }

   return(0); 
}

结果:

Invalid valueValid value

ERANGE Range Error

这个宏表示一个范围错误,它在输入参数超出数学函数定义的范围时发生,errno 被设置为 ERANGE。

(1)声明

#define ERANGE some_value

下面的实例演示了 ERANGE 宏的用法。

实例

#include

#include

#include

int main()

{

  double x;

  double value;

  x = 2.000000;

  value = log(x);

  if( errno == ERANGE )

   {

     printf("Log(%f) is out of range\n", x);

   } else {

     printf("Log(%f) = %f\n", x, value);

             }

  x = 1.000000;

  value = log(x);

  if( errno == ERANGE )

  {

    printf("Log(%f) is out of range\n", x);

   } else {

     printf("Log(%f) = %f\n", x, value);

  }

  x = 0.000000;

  value = log(x);

  if( errno == ERANGE )

  {

     printf("Log(%f) is out of range\n", x);

  } else {

    printf("Log(%f) = %f\n", x, value);

  }

  return 0;

  }

让我们编译并运行上面的程序,这将产生以下结果:

Log(2.000000) = 0.693147Log(1.000000) = 0.000000Log(0.000000) = -inf

转载于:https://www.cnblogs.com/xzj8023tp/p/11288728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值