SIG_IGNmacros定义中数字1的含义是什么?

#define SIG_IGN (void (*)(int))1 #define SIG_HOLD (void (*)(int))5 #define SIG_ERR ((void (*)(int))-1) 

我知道什么(void (*)(int))意味着:将unknown_name转换为指向函数(int)的指针返回void。

但是,以下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通过这种方式并没有提到这些常量-11 ,宁愿只说符号常量 (在预期的地方,无论如何): <signal.h>

进一步阅读:

  • 执行默认信号处理器
  • 24.3.1基本信号处理 (GNU C库)