是否有一个函数可以 return 一个符号名称,例如 `EIO`,用于 `errno` 值?

Is there a function that will return a symbol name, such as `EIO`, for an `errno` value?

在 Linux 和 OS X 上,strerror returns 一个人类可读的名称。例如,这是它刚刚在 Linux 上针对错误号 5.

返回的内容
Input/output error

没关系,但是手册页使用符号名称,例如EIO,并没有列出相应的数字。有没有我可以用来获取符号名称的函数?

我非常怀疑 pure POSIX 是否提供了以便携方式实现这一点的工具。在大多数情况下,我个人只是在编辑器中打开 /usr/include/errno.h 文件并从那里浏览它。 (在 Linux 上最终导致 /usr/include/asm-generic/errno-base.h/usr/include/asm-generic/errno.h 文件,其中实际指定了代码。)

此外,对于具有 GCC(或 clang)的系统,我可以想出这样的脚本:

gcc -dM -E - < /usr/include/errno.h  |
    grep 'define E\w\+ [0-9]\+$'  |
    sort -k3 -n

GNU 预处理器有一个选项 (-dM) 可以将它遇到的所有定义打印到输出中。这可用于帮助解析 /usr/include/errno.h 文件以提取错误代码。