4

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

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

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

此外,后来还有这个函数原型

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

但是,我在'myTypePtr'之前收到编译错误“预期的声明说明符或'...',知道为什么会这样吗?非常感谢。

4

1 回答 1

4

这首先typedef

typedef void (myType)(void);

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

typedef void myType(void);

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

第二typedef

typedef myType *myTypePtr;

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

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

希望这可以帮助!

于 2012-07-20T17:45:03.557 回答