c – 将整数转换为信号代码中的函数指针 – 为什么这样工作?

前端之家收集整理的这篇文章主要介绍了c – 将整数转换为信号代码中的函数指针 – 为什么这样工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在读一本书(UNIX环境中的高级编程),我将介绍有关信号的部分.

使用信号功能时:

void (*signal(int signo,void (*func)(int)))(int);

参数func可以是指向用户定义的函数的指针,也可以是SIG_ERR,SIG_DFL或SIG_IGN.

我的问题不在UNIX的一部分,但我想给予背景.我真正想知道的是,这本书指出,这些常数是defiend as:

#define SIG_ERR (void (*)())-1

等于0和1.

现在,我有一些体面的猜测,但是为了节省时间 – 有人可以告诉我这是做什么,为什么它的工作?

还有,有…呃…更清洁?写这个假设我正在使用C并与这个C API交互的方法

解决方法

它将整数转换为函数指针; *可以选择占位符值,以使它们不会与实际函数指针的值相冲突.信号的实现可能会检查这些特殊值的输入参数.

* C标准允许这一点(见6.3.2.3 p.5),尽管它表示结果是实现定义的.显然,操作系统的作者能够控制实现定义的方面,所以一切都OK.

猜你在找的C&C++相关文章