3

信号在实现之间有所不同。APUE(Unix环境中的高级编程)中有一些很好的表格,例如第2版第292页的“图10.1 UNIX系统信号”。

因此,让我们以示例为例SIGWAITING。信号在文档中显示为int,但大多数实现似乎使用 a#define而不是 a const int

但是,该标准是否规定了可以依赖信号的任何地方#define?或者我可以基于这样一个事实假设它,例如,几乎每个现有的实现都使用#define. 或者这完全是一个糟糕的假设?

基本原理是:如果我可以依赖#define被使用,我可以使用它#ifdef来隐藏不使用它的实现的更奇特的信号。对于const int常量名称,我不知道允许做出此编译时间决定的类似机制。

4

1 回答 1

3

请参阅 POSIX(2008、2013)规范<signal.h>。在某种程度上,它说:

<signal.h>头应定义以下宏,用于引用系统中出现的信号。此处定义的信号以字母 SIG 开头,后跟一个大写字母。宏应扩展为具有 int 类型和不同值的正整数常量表达式。值 0 保留用作空信号(请参阅 参考资料kill())。系统中可能会出现其他实现定义的信号。

…</p>

所有实现都应支持以下信号……</p>

后面是一个信号名称表。您链接到的版本是该标准的 2004 版,关于信号名称是否为宏并没有那么明确,但后来的版本编码了现有的做法。

因此,为了符合 POSIX,信号名称应为#define'd。

于 2014-01-31T16:46:55.017 回答