【问题标题】:Strange typedef to function pointer奇怪的typedef到函数指针
【发布时间】:2025-12-02 04:00:01
【问题描述】:

我正在使用其他人编写的代码,他们打算在其中使用函数指针。他们做了一个我无法理解的非常奇怪的 typdef。代码下方

typedef void (myType)(void);
typedef myType *myTypePtr;

我可以理解myTypePtr的主要思想是创建一个“指向一个接收void并返回void的函数的指针。但是原来的myType呢?那是什么?一个函数类型?不清楚对我来说。

另外,后面还有这个函数原型

int createData(int id,int *initInfo, myTypePtr startAddress)

但是,我在 'myTypePtr' 之前收到编译错误“expected declaration specifiers or '...' 知道为什么会这样吗?非常感谢。

【问题讨论】:

标签: c pointers types compiler-errors typedef


【解决方案1】:

这是第一个typedef

typedef void (myType)(void);

提供myType 作为void (void) 类型的同义词,这是一个不带参数并返回void 的函数的类型。 myType 周围的括号在这里实际上不是必需的;你也可以写

typedef void myType(void);

为了更清楚地表明它是一个接受void 并返回void 的函数的类型。请注意,您实际上不能声明任何函数类型的变量;在 C 中获取函数类型对象的唯一方法是定义一个实际函数。

第二个typedef

typedef myType *myTypePtr;

然后说myTypePtr 的类型等于指向myType 的指针,这意味着它是指向不带参数并返回void 的函数的指针。这个新类型等价于类型void (*)(void),但有点间接。

至于您的第二个错误,如果没有更多上下文,我无法确定发生了什么。请发布一个最小的测试用例,以便我们查看导致错误的原因。

希望这会有所帮助!

【讨论】:

  • 我解决了编译问题,我没有包括其他必要的文件,无论如何,谢谢你回答第一个typedef的意思,真的很不寻常,我很惊讶。再次感谢您。