整理自:http://topic.csdn.net/u/20091107/09/b7841460-1c2a-4927-a4b3-3d11ac948460.html
在学习APUE时遇到
#define SIG_DFL (void(*)())0
#define SIG_IGN (void(*)())1
所以宏里先做个转换,在函数中再对传入的值作处理,我觉得
他这么做应该是为了能将参数传进去,传进去以后他会根据指针的值判断,但是肯定不会调用这个函数指针,不然肯定出错的
C/C++ code
typedef void (*sighandler_t)();
#define SIG_ERR (sighandler_t)-1
#define SIG_DFL (sighandler_t)0
#define SIG_IGN (sighandler_t)1
而signal里面会有类似如下的一些逻辑
C/C++ code
signal(int sig,sighandler_t handler)
{
if(handler==SIG_ERR) { }
else if(handler==SIG_DFL) { }
else if(handler==SIG_IGN) { }
else { handler(); }
}
本文详细解析了C/C++中signal函数如何处理信号处理函数指针,包括SIG_ERR, SIG_DFL, SIG_IGN宏的作用及内部逻辑,以及如何在函数中正确使用这些宏。

1866

被折叠的 条评论
为什么被折叠?



