2012-07-20 98 views
4

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

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

我可以理解,与myTypePtr主要的想法是创建一个“指向接收无效并返回void。但是,我们原来myType功能?那是什么?函数类型?是不是我清楚。

此外,后有前‘myTypePtr’任何想法,为什么这是该函数原型

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

但是我得到的编译错误“预期声明说明符或‘...’发生?非常感谢你。

+0

使用范围中的两个typedef,它应该编译(如果您添加分号或函数体),并且它在此处执行。你能创建一个小测试用例吗? – 2012-07-20 18:15:12

+0

[typedef是什么意思?函数原型?](http://stackoverflow.com/questions/3674200/what-does-this-typedef-mean-a-function-prototype) – jamesdlin 2012-07-20 19:28:42

回答

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)型号,但是间接做了一点。

至于你的第二个错误,我不能肯定地说没有更多的上下文。请发布一个最小的测试用例,以便我们可以看到导致错误的原因。

希望这会有所帮助!

+0

我解决了编译问题,我没有包括其他必要的文件,在任何情况下,感谢您回答第一个typedef的含义,这真的很不寻常,我对此感到惊讶。再次感谢你。 – 2012-07-20 18:11:53