我刚发现了这个。
// /usr/include/sys/signal.h // OS X
#define SIG_ERR ((void (*)(int))-1)
((void (*)(int))-1)
部分是什么意思?
与
不同#define SIG_ERR -1
答案 0 :(得分:8)
这是强制转换为函数指针:
((type) value)
其中type是void (*)(int)
,它指向函数接受一个int
参数并返回void
,这实际上是信号处理程序的签名:
typedef void (*sighandler_t)(int);
您可以使用cdecl
工具或网站解码此类型:http://cdecl.org/
答案 1 :(得分:2)
这是函数指针-1的强制转换,它被期望作为SIG_ERR的类型。直接使用-1在编译器需要正确类型的情况下不起作用。