2012-07-20 96 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