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

Jin*_*won 9 c

我刚发现了这个.

// /usr/include/sys/signal.h // OS X
#define SIG_ERR ((void (*)(int))-1)
Run Code Online (Sandbox Code Playgroud)

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

是不同的

#define SIG_ERR -1
Run Code Online (Sandbox Code Playgroud)

mya*_*aut 8

这被转换为函数指针:

((type) value)
Run Code Online (Sandbox Code Playgroud)

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

typedef void (*sighandler_t)(int);
Run Code Online (Sandbox Code Playgroud)

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

  • @LeZohan68我从来没有说过myaut是错的,只是指针使用cdecl并不健康,有时候:-) (3认同)
  • @myaut是的,它可以采用变量名,而不是之后的值.我做了那个评论只是为了确保任何试图_copy-paste_确切指令并获得错误的人都不应该混淆.希望你不介意.:-) (2认同)