2010-12-21 99 views
1

我只是通過Mark Probst's diploma thesis瀏覽和stumpled在下面的代碼:遞歸返回類型

typedef void* cont(void); 

for (;;) 
{ 
    cp = (cont*)(*cp)(); 
} 

我敢肯定,劇組應該讀(cont),不(cont*),因爲他解釋說:

的函數希望做適當的尾部調用返回函數地址被稱爲

cont已經是一個指針函數類型。所以讓我們將該行更改爲:

cp = (cont)(*cp)(); 

現在我想知道,我們該如何擺脫演員?可以定義cont,因此它會返回conttypedefcont將如何?我們是否需要幫手類型來實現這一點?這是不可能的嗎?

+0

因此,Charles或Arkku的答案都不會讓你知道你爲什麼假設不正確? – Will 2011-01-14 14:41:01

回答

1

不,typedef void* cont(void);cont定義了返回void *的函數類型。我認爲你很難將它與typedef void (*cont)(void);typedef void *(*cont)(void);混淆。

我不認爲在這種情況下有可能消除對演員的需求,但是我打開以其他方式說服。

1

cont類型是返回void指針的函數。因此cont *是一個指向這樣的函數的指針,並且*不能從演員中刪除。