非常教程

C参考手册

错误处理 | Error handling

error

在头文件<errno.h>中定义

#define errno / *实现定义的* /

errno是一个预处理器宏,可扩展为线程本地(自C11)可修改类型的左值int。几个标准库函数通过写入正整数来指示错误errno。通常,值的errno设置为<errno.h>以字母E开头的后缀为大写字母或数字的宏常量中列出的错误代码之一。

errno​0​在程序启动时,尽管库函数可以写为正整数errno是否发生了错误,库函数永远保存​0​errno

库函数perrorstrerror可用于获取与当前errno值对应的错误条件的文本描述。

示例

#include <stdio.h>
#include <math.h>
#include <errno.h>
 
void show_errno(void)
{
    if(errno==EDOM)   printf("domain error");
    if(errno==EILSEQ) printf("illegal sequence");    
    if(errno==ERANGE) printf("pole or range error");
    if(errno==0)      printf("no error");
    printf(" occurred\n");
}
 
int main(void)
{
    printf("MATH_ERRNO is %s\n", math_errhandling & MATH_ERRNO ? "set" : "not set");
 
    errno = 0;
    1.0/0.0;
    show_errno();
 
    errno = 0;
    acos(+1.1);
    show_errno();
 
    errno = 0;
    log(0.0);
    show_errno();
 
    errno = 0;
    sin(0.0);
    show_errno();
}

输出:

MATH_ERRNO is set
pole or range error occurred
domain error occurred
pole or range error occurred
no error occurred

参考

  • C11标准(ISO/IEC 9899:2011):
    • 7.5错误<errno.h>(p:205)
    • K.3.1.3使用errno(p:584)
    • K.3.2错误<errno.h>(p:585)
  • C99标准(ISO/IEC 9899:1999):
    • 7.5错误<errno.h>(p:186)
  • C89 / C90标准(ISO/IEC 9899:1990):
    • 4.1.3错误<errno.h>

另请参阅

E2BIG,EACCES,...,EXDEV

用于标准POSIX兼容错误条件的宏(宏常量)

PERROR

显示当前错误对应的字符串到stderr(函数)

strerrorstrerror_sstrerrorlen_s(C11)(C11)

返回给定错误代码(函数)的文本版本

math_errhandlingMATH_ERRNOMATH_ERREXCEPT(C99)(C99)(C99)

定义了常用数学函数(宏常量)使用的错误处理机制,

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。