有人可以告诉我以下代码是什么吗?是函数声明还是声明?这是有效的代码吗?
static void (*const handle_screens[NO_OF_SCREENS]) (void) =
{ status_screens, settings_screens, access_screens, configuration_screens,
history_screens };
答案 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
答案 2 :(得分:1)
有一个common rule(我刚刚刷新了我的记忆),涵盖了如何解码C声明和定义。按照该链接上的说明,您的声明是:handle_screens
是一个静态数组,NO_OF_SCREENS
个const
条目指向函数,没有参数返回void
。
这个数组正在初始化,有五个函数,所以我敢打赌NO_OF_SCREENS是5,个人。这意味着EnabrenTane在说明函数定义为void foo(void)
时是正确的。