什么是’void(* old_sigint_handler)(int)’?

这是一个语法问题。 我遇到了这条线:

void (*old_sigint_handler)(int); 

我不知道它在做什么。 它似乎是三种类型的串联,没有变量名称。 我很感激澄清!

 void (*old_sigint_handler)(int); 

这将old_sigint_handler定义为一个指向函数的指针,该函数接受一个int并返回void ,即没有值。 old_sigint_handler周围的括号在old_sigint_handler是必要的以下内容:

 void *old_sigint_handler(int); 

声明一个函数old_sigint_handler ,它接受一个int并返回一个指向void类型的指针。 这是因为C中的优先规则。 括号紧密绑定到old_sigint_handler不是*使其成为函数而不是指向函数的指针。 阅读本文以精神上解析复杂的C声明 – 顺时针/螺旋规则 。

利用cdecl来了解它的确切含义。 这是C -> English

declare old_sigint_handler as pointer to function (int) returning void

是一个函数指针,带有签名的函数void (int)

这是一个名为old_sigint_handler的变量的变量声明,它可以保存一个函数指针,该函数指向一个接受int并且不返回任何内容的函数(void)。

它是一个名为old_sigint_handler的函数指针的声明,它接受一个int并且不返回任何内容。

它是一个名为old_sigint_handler的函数指针的声明,它指向一个接受int并返回void的函数。