C 代码的解释是什么?

C 代码的解释是什么?,c,function-pointers,C,Function Pointers,谁能告诉我下面的代码是什么?它是函数声明还是语句?它是有效代码吗 static void (*const handle_screens[NO_OF_SCREENS]) (void) = { status_screens, settings_screens, access_screens, configuration_screens, history_screens }; 它是签名的函数指针的常量数组void foo(void) 这些是容易的。谷歌搜索令人兴奋的内容。有一个(

谁能告诉我下面的代码是什么?它是函数声明还是语句?它是有效代码吗

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

它是签名的函数指针的常量数组
void foo(void)

这些是容易的。谷歌搜索令人兴奋的内容。

有一个(我刚刚刷新了记忆)介绍了如何解码C声明和定义。按照该链接上的说明,您的声明是:
handle\u screens
是一个静态数组,具有
NO\u个屏幕
const
指向函数的指针,而不返回参数
void


这个数组是用五个函数初始化的,所以我敢打赌没有一个屏幕是5个。这意味着函数定义是
void foo(void)

这一说法是正确的。如果所有其他操作都失败,并且您不能100%确定声明声明的内容,请查看
cdecl
实用程序。它是一个Linux实用程序,但也有人为它创建了一个web界面。选择一个随机数插入
NO_OF_屏幕
#define,您将得到:

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

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

“它是有效代码吗?”您知道,可以通过键入并编译它来回答。至于其余的,它似乎是一个函数指针数组,每个指针指向一个没有参数的函数,并且返回不透明的数据类型(
void*
)或者什么都没有(
void
)可能被用作某种屏幕处理程序。我相信如果它们返回void*,它将是void*(*const handle\u screens[no\u screens])(无效)是的,你说得对,EnabrenTane。我只是反复检查了“先右后左”的规则。JMcO:不,这个问题不能通过键入代码并编译来回答。大多数编译器都会错误地接受某种无效代码。仅仅因为编译器接受代码就假设代码是有效的,这不是一个坏习惯吗Ius?他从来没有听说过超链接吗?是一个
void foo(void)
还是一个
void*foo(void)
?这些天我已经不知道讨厌的函数指针语法了。这是允许的。一系列指向函数的指针,可以取空,也可以返回空…我想。很好的网站。如果我再次被C编程所累,我会使用它。