gpt4 book ai didi

c - 所有 POSIX/SUS 信号都是 #define 是给定的还是假设的?

转载 作者:行者123 更新时间:2023-12-03 03:30:31 24 4
gpt4 key购买 nike

信号因实现而异。 APUE(Unix环境中的高级编程)中有一些不错的表格,例如第2版第292页的“图10.1 UNIX系统信号”。

让我们以 SIGWAITING 为例。信号出现in the documentation as int ,但大多数实现似乎使用 #define 而不是 const int

但是,该标准是否规定在任何地方都可以依赖#define信号?或者我可以根据这样一个事实来假设它:几乎每个现有的实现都使用#define。或者这完全是一个错误的假设?

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

最佳答案

请参阅 POSIX(2008、2013)规范 <signal.h> 。其中部分内容是:

The <signal.h> header shall define the following macros that are used to refer to the signals that occur in the system. Signals defined here begin with the letters SIG followed by an uppercase letter. The macros shall expand to positive integer constant expressions with type int and distinct values. The value 0 is reserved for use as the null signal (see kill()). Additional implementation-defined signals may occur in the system.

The following signals shall be supported on all implementations…

后面是信号名称表。您链接到的版本是该标准的 2004 版,对于宏的信号名称并没有那么明确,但更高版本将现有实践编入法典。

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

关于c - 所有 POSIX/SUS 信号都是 #define 是给定的还是假设的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com