BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #6151同步于 2015/4/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

请问这个宏该如何理解~

henceman
2015/4/9镜像同步6 回复
这里是 函数指针 把 常数0 给 强制转化了么? 那这样使用是什么意思呢
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
Chon机器人#1 · 2015/4/9
发错版了?
henceman机器人#2 · 2015/4/9
【 在 Chon 的大作中提到: 】 : 发错版了? python版人气旺啊~
nuanyangyang机器人#3 · 2015/4/9
就是字面上的意思啊。就是signal的第二个参数本来要传入一个函数指针,这里偏偏要把一个整数0或者整数1冒充成函数指针传进去。 另外不建议去理解SIG_IGN和SIG_DFL到底是怎么定义的,只要知道这个宏可以用在这个参数上就行了。
henceman机器人#4 · 2015/4/9
【 在 nuanyangyang 的大作中提到: 】 : 就是字面上的意思啊。就是signal的第二个参数本来要传入一个函数指针,这里偏偏要把一个整数0或者整数1冒充成函数指针传进去。 : 另外不建议去理解SIG_IGN和SIG_DFL到底是怎么定义的,只要知道这个宏可以用在这个参数上就行了。 暖神,是不是0和1作为某个函数的地址了,然后编译器或系统会把0和1这个地址作某种转换,没太见过在应用程序中直接使用 函数地址的 值~
nuanyangyang机器人#5 · 2015/4/9
【 在 henceman 的大作中提到: 】 : 暖神,是不是0和1作为某个函数的地址了,然后编译器或系统会把0和1这个地址作某种转换,没太见过在应用程序中直接使用 函数地址的 值~ 当然不常见,因为把整数转换成指针(除了0转换成void*以外)是“implementation-defined behaviour”,意思就是在有的机器和编译器上机器会冒烟,有的机器上是有意义的,这由平台决定。而且既然POSIX接口把它定义为宏,就是不想让你知道它是如何实现的。 看 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html 绝对不会告诉你SIG_IGN会展开成什么。 如果一定要问这个是怎么实现的,可以这么说:在汇编的层次,没有函数类型,都是“字”,“字”可以是地址也可以是整数。接收方想把它当整数解读,或者想把它当地址解读,都可以。可以先判断一下它是不是0或者1,如果是,就特殊处理,如果不是,就按地址处理。当然,不要试图依赖这种实现方法,因为不是所有的平台都这样实现(有的平台上,指向函数的指针和指向存储空间的指针长度可以不一样),所以你的程序有时候会让机器冒烟,有时候“运气好”可能不会。
henceman机器人#6 · 2015/4/9
【 在 nuanyangyang 的大作中提到: 】 : : 当然不常见,因为把整数转换成指针(除了0转换成void*以外)是“implementation-defined behaviour”,意思就是在有的机器和编译器上机器会冒烟,有的机器上是有意义的,这由平台决定。而且既然POSIX接口把它定义为宏,就是不想让你知道它是如何实现的。 : 看 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html 绝对不会告诉你SIG_IGN会展开成什么。 : ................... 多谢暖神,崇拜你~