将POSIX整数errno转换为编译时常量

8
有时候(例如使用 stracegdb 等工具),会发现 POSIX 调用将 errno 设置为整数值,而且想要知道编译时的 C 常量(更准确地说是预处理器定义)来检查它(如 ECHILD) - 请参见例如waitpid for child process not succeeding
例如,在上述链接的问题中,整数错误号码 10 返回到了 errno 中。我想从中得到字符串 ECHILD,而不是像 perrorstrerror 给出的内容(类似于“没有子进程”等)。
这里是明显但行不通的方法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main (int argc, char **argv)
{
  printf ("%s\n", strerror (10));
  exit (0);
}

这将打印输出:

No child processes

不是ECHILD,因此无法执行所需操作。

有没有比在/usr/include中进行相对手动的grep更简单的方法?

你可能认为是重复项但实际上并非如此:

适当的答案可能涉及一些魔法,以预处理 /usr/include 的适当部分,并显示以 E 开头且具有适当值的任何常量。


问题有点不清楚。您的意思是,给定ECHILD的int值,您想要该符号“ECHILD”的名称吗? - BadZen
@BadZen - 没错。我会澄清一下。 - abligh
@cdarke - 我认为那个跟我提到的第二个差不多 - 我不需要 用C语言 来实现它。 - abligh
11个回答

-1
#ifndef NDEBUG
        fprintf(stderr, "Line %d: Error value: %d\n", __LINE__, errno);
#endif

然后在调试器中查找打印的值。


1
我认为这个想法是获取错误符号的文本表示,以便您可以打印它而不是(晦涩难懂的)数值。 - M Oehm
打印错误的整数值(例如10),而不是符号表示(例如ECHILD)。 - abligh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接