本文主要是介绍#define SIG_ERR (void(*)())-1 的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
整理自: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(); }
}
这篇关于#define SIG_ERR (void(*)())-1 的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!