微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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",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",value);

  }

  return 0;

  }

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐