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编程所累,我会使用它。