奇怪的typedef到函数指针

时间:2012-07-20 17:42:03

标签: c pointers types compiler-errors typedef

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

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

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

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

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

但是我在'myTypePtr'之前得到了编译错误“期望的声明说明符或'...',为什么会发生这种情况呢?非常感谢。

1 个答案:

答案 0 :(得分:4)

第一个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)类型,但间接完成。

关于你的第二个错误,如果没有更多的背景,我无法确定是什么。请发布一个最小的测试用例,以便我们可以看到导致错误的原因。

希望这有帮助!