关于c语言中得errno,它是全局变量,它是定义在源文件中吗比如下面的代码,它的值的文本形式对应不同的错误,这在errno.h文件中能查到吗?


#include <stdio.h>
#include <errno.h>
#include <string.h>
 
extern int errno ;//定义变量(错误代码)
 
int main ()
{
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");//尝试打开一个不存在的文件
   if (pf == NULL)
   {
      errnum = errno;//将错位代码赋值给代码中的变量
      fprintf(stderr, "错误号: %d\n", errno);  //将错误代码以十进制形式输出到标准错误流
      perror("通过 perror 输出错误");//打印程序员给的字符串+:,后面是错误代码的文本形式
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));//传入错误代码的十进行制值给strerror()并打印出错误代码的文本形式
   }
   else
   {
      fclose (pf);//关闭文件流
   }
   return 0;
}

errorno到底在哪里定义,程序运行过程中它的值又存储到了哪里?

errno定义在源文件中;程序运行过程中它的值输出到标准错误输出流stderr中也就是输出到屏幕上;之后perror函数运行的时候会去errno.h中找到errno十进制错误编号对应的错误文本形式,再输出到屏幕上;而strerr()需要传入错误编号,它才会去errno.h的内容中查找对应的错误文本;
虽然errno.h我们很难查看,但道理是这样的;

VS IDE中,在不明白的符号strerror或errno上点鼠标右键,选转到定义。