信号在实施方面有所不同。 APUE(Unix环境中的高级编程)中有一些不错的表,例如第2版第292页的“图10.1 UNIX系统信号”。
因此,让我们采用示范SIGWAITING
。信号显示为in the documentation as int
,但大多数实现似乎使用#define
而不是const int
。
但是,标准是否规定任何人可以依赖#define
d的信号?或者我可以基于这样的事实来假设它,例如,几乎每个现有实现都使用#define
。或者这是一个不好的假设?
基本原理是:如果我可以依赖#define
使用,我可以使用#ifdef
隐藏来自不使用它的实现的更奇特的信号。对于const int
常量名称,我不知道有一个类似的机制可以让这个编译时间做出决定。
答案 0 :(得分:3)
请参阅<signal.h>
的POSIX(2008,2013)规范。在某种程度上,它说:
<signal.h>
标头应定义以下宏,用于指代系统中发生的信号。此处定义的信号以字母SIG开头,后跟大写字母。宏应扩展为具有int和distinct值类型的正整数常量表达式。值0保留用作空信号(参见kill()
)。系统中可能会出现其他实现定义的信号。...
所有实施都应支持以下信号......
然后是一个信号名称表。您链接的版本是标准的2004版本,并且信号名称不是宏,但后面的版本编码现有的做法。
因此,要符合POSIX,信号名称应为#define
'd。