我在想如何編寫一個函數,該函數返回一個函數指針,該函數返回一個函數指針,而沒有typedef。例如它返回一個函數指針可以被定義爲一個函數:如何聲明一個函數,該函數返回的指針返回的函數指針不使用C中的typedef?
type (*f_name(..))(..){..}
所以這會返回一個指針,它返回一個「類型」的功能,現在你怎麼聲明功能,如果「類型」是函數指針。但是因爲我的主管不想使用typedefs,所以我不能使用它們。
感謝您提供任何幫助。
我在想如何編寫一個函數,該函數返回一個函數指針,該函數返回一個函數指針,而沒有typedef。例如它返回一個函數指針可以被定義爲一個函數:如何聲明一個函數,該函數返回的指針返回的函數指針不使用C中的typedef?
type (*f_name(..))(..){..}
所以這會返回一個指針,它返回一個「類型」的功能,現在你怎麼聲明功能,如果「類型」是函數指針。但是因爲我的主管不想使用typedefs,所以我不能使用它們。
感謝您提供任何幫助。
對於像這樣的問題,有一個叫做cdecl
(http://cdecl.org/)的漂亮實用程序,它可以在英語和C語言之間進行轉換。
例如
cdecl> declare f as function (int) returning pointer to function (char) returning pointer to function (void) returning long
給出了答案
long (*(*f(int))(char))(void)
,並在另一個方向上,
cdecl> explain int (*(*g(float))(double, double))(char)
給
聲明克作爲函數(浮點)返回指針功能(雙,雙 )返回指針功能(炭)返回int
順便說一句,有它的web界面:http:// cdecl。org/ – myaut
是的,只是添加了網址。感謝您的提醒。 – drRobertz
謝謝,這個工具很好,給出的答案是我正在尋找。 – user3711004
首先我們寫一個函數採取一個int並返回一個浮子。
float First(int f)
{
return (float)f ;
}
然後我們寫一個函數無所取,並返回一個指向函數獲取int和返回浮動。
該指針與First
相同。
float (*Second(void))(int)
{
float (*f)(int) = First ;
return f ;
}
最後,我們寫一個函數取一個char並返回一個指針的函數無所取,並返回一個指向函數獲取int和返回浮動。該指針與Second
相同。
float (*(*Third(char c))(void))(int)
{
(void)c ;
float (*(*s)(void))(int) = Second ;
return s ;
}
如果將沿着彼此的原型,怪異的語法開始變得有意義:
float First (int) ;
float ( *Second (void))(int) ;
float (*(*Third(char))(void))(int) ;
到返回一個非函數指針的唯一區別是,函數指針參數走在最後的聲明和括號:
type* Name(void) ;
function_type (*Name(void))(int) ;
只需用一個未命名的函數指針替換'type'即可。 –
你的主管不需要typedefs?多麼奇怪的想法...... 目前還不清楚你想要什麼。你只是想要一個函數返回一個函數指針,還是你希望它遞歸地作爲函數指針返回函數? 你有什麼嘗試? – Eregrith
先用''typedef''來執行,然後手動解析''typedef''。 – Philip