【发布时间】:2021-06-27 13:50:17
【问题描述】:
更新:
这只是一些愚蠢的事情。几分钟后我的电脑崩溃了,重新启动后它会抛出与其他所有人相同的错误......即使我使用 GIT 回到原始版本也是如此。我猜PC的RAM中有些东西搞砸了?呵呵
在C语言中,可以使用函数指针类型来声明和定义函数吗?
我做错了,但它按预期工作,没有发出任何警告:
init.h:
typedef bool (*InitFunc)(void);
init.c:
#include <init.h>
#include <moduleX.h>
InitFunc initFuncs[N];
bool init(void)
{
...
initFuncs[n] = &moduleX_Init;
...
}
bool initTask(void* Args)
{
initFuncs[n]();
}
moduleX.h:
#include <init.h>
InitFunc moduleX_Init(void);
moduleX.c:
#include <moduleX.h>
InitFunc moduleX_Init(void)
{
...
return true;
}
如您所见,我使用函数指针的typedef 定义了函数moduleX_Init。它使用 GCC (arm-none-eabi-gcc) 编译,甚至没有警告并按预期工作。
我只是错误地这样做了,但是当我注意到它时,我想知道这是否实际上是一种声明函数的合规方式,或者它恰好适用于 GCC。
编辑:
如果我像这样InitFunc moduleX_Init; 进行声明,则会收到以下错误:
分配给类型 InitFunc {aka _Bool 时的类型不兼容 (*)(void)}' 来自类型 '_Bool'
因此,当在变量声明中使用时,函数指针类型就像返回类型的typedef 一样工作。这是标准行为,还是只是 GCC 的特殊性?
【问题讨论】:
-
不能在不同类型的函数指针之间赋值。这不符合 C 语言。您可以通过显式强制转换来做到这一点,但您仍然必须使用正确的类型调用函数。
-
为什么
moduleX_Init不只返回一个bool?
标签: c syntax typedef function-declaration function-definition