【问题标题】:Can someone explain this?有人可以解释一下吗?
【发布时间】:2011-01-26 22:41:07
【问题描述】:

下面这行是什么意思?

void(*fnctn)(void(*)(int *,void **),int(*)(void**,int*));

【问题讨论】:

  • 访问cdecl.org
  • 如果这是从任何真实代码中获取的,那么请杀死作者。
  • 那表示猫又在键盘上了。
  • @sbi:他不知何故编写了有效的 C 代码...
  • @sbi:这是一只特别的猫。 Perl 中的平均一个程序。

标签: c++ function


【解决方案1】:

你所拥有的本质上是一个函数指针'fnctn',它的两个参数需要两个函数指针。如果我们一点一点地分解它,您将拥有以下内容:

第一个参数void(*)(int*, void**)是一个返回void的函数指针,它的两个参数是int*和void**。

第二个参数int(*)(void**, int*)是一个函数指针,返回一个int值,并以一个void**和一个int*作为它的两个参数。

也许下面这样看会更清楚:

typedef void(*param1)(int *, void**);
typedef int(*param2)(void**, int*);
typedef void(*fnctn)(param1, param2);

【讨论】:

    【解决方案2】:
    $ cdecl
    Type `help' or `?' for help
    cdecl> explain void(*fnctn)(void(*)(int *,void **),int(*)(void**,int*));
    declare fnctn as pointer to function (pointer to function (pointer to int, pointer to pointer to void) returning void, pointer to function (pointer to pointer to void, pointer to int) returning int) returning void
    cdecl> 
    

    【讨论】:

    • 对于我们这些不得不在 Windows 领域花费大量时间的人,您可以随时使用 online version of CDecl(是的,不幸的是,我在很多代码都是由喜欢使用声明的人编写的,只是比这个问题中的代码稍微不那么疯狂)
    【解决方案3】:

    哇,好吧,这里有一两个 typedef 会很好,但它说...

    声明一个指向函数的指针,该函数使用标识符“fnctn”作为参数返回 void,并以 int* 和 void** 作为参数,以及返回 int 的函数一个 void** 和一个 int* 作为参数。

    延伸阅读:Function pointer syntax

    【讨论】:

      【解决方案4】:

      尝试学习顺时针螺旋规则:http://c-faq.com/decl/spiral.anderson.html 有了这个,您可以了解几乎任何函数声明的含义,从而使您能够确定它的作用。

      【讨论】:

        【解决方案5】:

        在我看来,函数指针的声明类似于一个函数指针,该函数指针指向一个以int*, void** 作为参数并返回void 作为第一个参数的函数,以及一个指向以@ 为参数的函数的函数指针987654323@ 作为参数并返回 int 作为第二个参数。该函数的返回类型为void

        清如泥。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-22
          • 2016-12-12
          • 2011-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-21
          相关资源
          最近更新 更多