#define SIG_IGN (void (*)(int))1
#define SIG_HOLD (void (*)(int))5
#define SIG_ERR ((void (*)(int))-1)
我知道 (void (*)(int))
是什么意思:将 unknown_name 转换为指向返回 void 的函数 (int) 的指针。
但是下面的1
是什么意思呢?
最佳答案
使用常量是为了将其与有效的函数指针区分开来。它本身没有任何意义(除了与众不同)。
例如:
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
这些常量值都不是您可以调用的有效函数地址。因此,它们作为特殊值非常有用,可用于说明如何处理信号。
顺便说一下,POSIX 没有提到这些常量 -1
, 0
或 1
,宁愿只说符号常量(无论如何在预期的地方): <signal.h>
.
进一步阅读:
关于c - SIG_IGN 宏定义中的数字 1 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35105452/