[英]How do I declare a function that returns a pointer to a function that returns a function pointer without using a typedef in C?
我想知道如何編寫一個函數,它返回一個指向函數的指針,該函數返回一個沒有typedef的函數指針。 例如,返回函數指針的函數可以定義為:
type (*f_name(..))(..){..}
所以這會返回一個指向返回'type'的函數的指針,現在如果'type'是一個函數指針,你如何聲明該函數。 但由於我的主管不想使用typedef,我無法使用它們。
謝謝你提供的所有幫助。
對於這樣的問題,有一個叫做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)
給
聲明g作為函數(float)返回指向函數(double,double)的指針,返回指向函數(char)返回int的指針
首先我們編寫一個帶int的函數並返回一個float。
float First( int f )
{
return ( float )f ;
}
然后我們寫一個函數,什
該指針與First
類型相同。
float ( *Second( void ) )( int )
{
float (*f)( int ) = First ;
return f ;
}
最后,我們編寫了一個函數,它接受一個char並返回一個指向函數的指針,該函數不執行任何操作,並返回一個指向函數的指針,該函 該指針與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 ) ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.