理解这个复杂的声明

时间:2017-06-04 03:13:14

标签: c++

static void (* __set_malloc_handler(void (*__f)()))();

我认为__set_malloc_handler是一个函数指针,它指向一个也需要一个函数指针的函数。但是,我不知道如何理解整个陈述。它是如何工作的?

2 个答案:

答案 0 :(得分:1)

通过一些别名更容易理解。

//pointer to function taking no arguments and void return
typedef void(*function_pointer)();

//function taking "function_pointer" and returning "function_pointer"
function_pointer __set_malloc_handler(function_pointer __f);

要阅读类似内容,我建议使用right-left rule。这是我一直用的东西。还有一个spiral rule,但是当它没有形成一个完美的螺旋时我感到恼火,而我却太注意力集中注意力了。你可能不会遇到这个问题。

任何一页的解释都比较全面,但这是一个速成课程。

基本上,请将这些符号读作:

  1. * ="指向"
  2. 的指针
  3. (...) ="功能正常..."
  4. [...] ="大小为..."
  5. 的数组

    向右阅读,直到找到尚未匹配)的{​​{1}}为止。然后向左阅读,直到找到匹配它的(。再次开始阅读。如果您点击右侧的行尾,则完成向左阅读。

    标识符(的右边是一个开放的括号__set_malloc_handler,这意味着它是一个函数。从那个到匹配的(的所有内容都是参数类型。我建议首先忽略它并稍后再回来。一步一步:

    )

    查看参数,我们有:

           __set_malloc_handler(...)    //function taking ...
         (*__set_malloc_handler(...))   //and returning a pointer
         (*__set_malloc_handler(...))() //to a function taking no arguments
    void (*__set_malloc_handler(...))() //that returns void
    

答案 1 :(得分:1)

__set_malloc_handler是一个函数,它接受“函数指针指向void函数”并返回“函数指针指向void函数”。关键字static使其仅对当前文件可见。