代码的解释是什么?

时间:2010-12-19 07:17:06

标签: c function-pointers

有人可以告诉我以下代码是什么吗?是函数声明还是声明?这是有效的代码吗?

static void (*const handle_screens[NO_OF_SCREENS]) (void) =
    { status_screens, settings_screens, access_screens, configuration_screens,
      history_screens };

3 个答案:

答案 0 :(得分:9)

它是签名void foo(void)

的常量函数指针数组

这些都很容易。谷歌C Complex Declaration为令人兴奋的。

答案 1 :(得分:6)

如果所有其他方法都失败了,并且您不能100%确定声明声明的内容,请查看cdecl实用程序。它是一个Linux实用程序,但是有人还在cdecl.org为它创建了一个Web界面。选择一个随机数来插入NO_OF_SCREENS #define,然后得到:

> static void (*const handle_screens[1]) (void);

declare handle_screens as static array 1 of const pointer to function (void) returning void

Link to result.

答案 2 :(得分:1)

有一个common rule(我刚刚刷新了我的记忆),涵盖了如何解码C声明和定义。按照该链接上的说明,您的声明是:handle_screens是一个静态数组,NO_OF_SCREENSconst条目指向函数,没有参数返回void

这个数组正在初始化,有五个函数,所以我敢打赌NO_OF_SCREENS是5,个人。这意味着EnabrenTane在说明函数定义为void foo(void)时是正确的。