我正在使用其他人编写的代码,他们打算使用函数指针。他们做了一个我无法理解的非常奇怪的类型。代码下方
typedef void (myType)(void);
typedef myType *myTypePtr;
我可以理解,使用myTypePtr
的主要思想是创建一个“指向接收void并返回void的函数的指针。但原始myType
怎么样?那是什么?函数类型?我不清楚。
此外,后来还有这个函数原型
int createData(int id,int *initInfo, myTypePtr startAddress)
但是我在'myTypePtr'之前得到了编译错误“期望的声明说明符或'...',为什么会发生这种情况呢?非常感谢。
答案 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)
类型,但间接完成。
关于你的第二个错误,如果没有更多的背景,我无法确定是什么。请发布一个最小的测试用例,以便我们可以看到导致错误的原因。
希望这有帮助!