命名空间
变体
操作

错误处理

来自 cppreference.cn
< c

目录

[编辑] 错误码

定义于头文件 <errno.h>
扩展为 POSIX 兼容的线程局部错误码变量的宏
(宏变量) [编辑]
标准 POSIX 兼容错误条件的宏
(宏常量) [编辑]

[编辑] 断言

定义于头文件 <assert.h>
如果用户指定的条件不为 true,则中止程序。可以在发布版本中禁用。
(函数宏) [编辑]
(C11)(在 C23 中移除)
如果常量表达式的值为 false,则发出编译时诊断。
(关键字宏)

边界检查

标准库提供了一些现有函数的边界检查版本(gets_sfopen_sprintf_sstrcpy_swcscpy_smbstowcs_sqsort_sgetenv_s 等)。此功能是*可选的*,仅当定义了 __STDC_LIB_EXT1__ 时才可用。以下宏和函数支持此功能。

 
定义于头文件 <errno.h>
定义于头文件 <stdio.h>
errno_t
(C11)
类型 int 的 typedef,用于自文档化返回 errno 值的函数。
(typedef)
 
定义于头文件 <stddef.h>
定义于头文件 <stdio.h>
在头文件 <stdlib.h> 中定义
定义于头文件 <string.h>
定义于头文件 <time.h>
在头文件 <wchar.h> 中定义
rsize_t
(C11)
size_t 相同类型的 typedef,用于自文档化在运行时进行参数范围检查的函数。
(typedef)
 
定义于头文件 <stdint.h>
RSIZE_MAX
(C11)
边界检查函数可接受的最大大小,展开为常量或变量,该变量在运行时可能发生变化(例如,当当前分配的内存大小变化时)。
(宏变量)
 
在头文件 <stdlib.h> 中定义
为边界检查函数设置错误回调。
(函数) [编辑]
边界检查函数的中止回调。
(函数) [编辑]
边界检查函数的忽略回调。
(函数) [编辑]

注意:边界检查函数的实现可在开源库 Safe CSlibc 中找到,并且是 Watcom C 的一部分。Visual Studio 中也有一组不兼容的边界检查函数。

(C11 起)

[编辑] 注意

自 C23 起,static_assert 本身就是一个关键字,也可能是一个预定义宏,因此 <assert.h> 不再提供它。

[编辑] 参考

扩展内容
  • C23 标准 (ISO/IEC 9899:2024)
  • 7.2 诊断 <assert.h> (p: TBD)
  • 7.5 错误 <errno.h> (p: TBD)
  • 7.19 常见定义 <stddef.h> (p: TBD)
  • 7.20 整型 <stdint.h> (p: TBD)
  • 7.21 输入/输出 <stdio.h> (p: TBD)
  • 7.22 通用工具 <stdlib.h> (p: 待定)
  • K.3.1.3 errno 的使用 (p: TBD)
  • K.3.2/2 errno_t (p: TBD)
  • K.3.3/2 rsize_t (p: TBD)
  • K.3.4/2 RSIZE_MAX (p: TBD)
  • 7.31.3 错误 <errno.h> (p: TBD)
  • 7.31.10 整型 <stdint.h> (p: TBD)
  • 7.31.11 输入/输出 <stdio.h> (p: TBD)
  • 7.31.12 通用工具 <stdlib.h> (p: 待定)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.2 诊断 <assert.h> (p: TBD)
  • 7.5 错误 <errno.h> (p: TBD)
  • 7.19 常见定义 <stddef.h> (p: TBD)
  • 7.20 整型 <stdint.h> (p: TBD)
  • 7.21 输入/输出 <stdio.h> (p: TBD)
  • 7.22 通用工具 <stdlib.h> (p: 待定)
  • K.3.1.3 errno 的使用 (p: TBD)
  • K.3.2/2 errno_t (p: TBD)
  • K.3.3/2 rsize_t (p: TBD)
  • K.3.4/2 RSIZE_MAX (p: TBD)
  • 7.31.3 错误 <errno.h> (p: TBD)
  • 7.31.10 整型 <stdint.h> (p: TBD)
  • 7.31.11 输入/输出 <stdio.h> (p: TBD)
  • 7.31.12 通用工具 <stdlib.h> (p: 待定)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.2 诊断 <assert.h> (p: 186-187)
  • 7.5 错误 <errno.h> (p: 205)
  • 7.19 常见定义 <stddef.h> (p: 288)
  • 7.20 整型 <stdint.h> (p: 289-295)
  • 7.21 输入/输出 <stdio.h> (p: 296-339)
  • 7.22 通用工具 <stdlib.h> (p: 340-360)
  • K.3.1.3 errno 的使用 (p: 584)
  • K.3.2/2 errno_t (p: 585)
  • K.3.3/2 rsize_t (p: 585)
  • K.3.4/2 RSIZE_MAX (p: 585)
  • 7.31.3 错误 <errno.h> (p: 455)
  • 7.31.10 整型 <stdint.h> (p: 456)
  • 7.31.11 输入/输出 <stdio.h> (p: 456)
  • 7.31.12 通用工具 <stdlib.h> (p: 456)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.2 诊断 <assert.h> (p: 169)
  • 7.5 错误 <errno.h> (p: 186)
  • 7.26.3 错误 <errno.h> (p: 401)
  • 7.26.8 整型 <stdint.h> (p: 401)
  • 7.26.9 输入/输出 <stdio.h> (p: 402)
  • 7.26.10 通用工具 <stdlib.h> (p: 402)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.2 诊断 <assert.h>
  • 4.1.3 错误 <errno.h>
  • 4.13.1 错误 <errno.h>
  • 4.13.6 输入/输出 <stdio.h>
  • 4.13.7 通用工具 <stdlib.h>

[编辑] 另见

定义常用数学函数使用的错误处理机制
(宏常量) [编辑]
C++ 文档 关于 错误处理