簡體   English   中英

如何在不使用C中的typedef的情況下聲明一個返回指向函數的函數的函數,該函數返回函數指針?

[英]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,我無法使用它們。

謝謝你提供的所有幫助。

對於這樣的問題,有一個叫做cdeclhttp://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM