((void(*)(int)) - 1)是什么意思?

时间:2015-06-08 06:13:07

标签: c

我刚发现了这个。

// /usr/include/sys/signal.h // OS X
#define SIG_ERR ((void (*)(int))-1)

((void (*)(int))-1)部分是什么意思?

不同
#define SIG_ERR -1

2 个答案:

答案 0 :(得分:8)

这是强制转换为函数指针:

((type) value)

其中type是void (*)(int),它指向函数接受一个int参数并返回void,这实际上是信号处理程序的签名:

typedef void (*sighandler_t)(int);

您可以使用cdecl工具或网站解码此类型:http://cdecl.org/

答案 1 :(得分:2)

这是函数指针-1的强制转换,它被期望作为SIG_ERR的类型。直接使用-1在编译器需要正确类型的情况下不起作用。