如何在 C 中不使用 typedef 的情况下声明一个 returns 指向 returns 函数指针的函数的函数?
How do I declare a function that returns a pointer to a function that returns a function pointer without using a typedef in C?
我想知道如何编写一个函数,其中 returns 一个指向函数的指针, returns 一个函数指针,没有 typedef。例如一个函数,其中returns一个函数指针可以定义为:
type (*f_name(..))(..){..}
所以这个 returns 一个指向 returns 一个 '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)
给予
declare g as function (float) returning pointer to function (double,
double) returning pointer to function (char) returning int
首先我们编写一个函数,接受一个 int 并返回一个 float。
float First( int f )
{
return ( float )f ;
}
然后我们编写一个函数,它什么都不带,返回一个指针,指向一个带 int 并返回 float 的函数。
这个指针与 First
的类型相同。
float ( *Second( void ) )( int )
{
float (*f)( int ) = First ;
return f ;
}
最后,我们编写了一个函数,它接受一个 char 并返回一个指向函数的指针,该函数不接受任何内容并返回一个指向一个接受 int 并返回 float 的函数的指针。该指针与 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 ) ;
我想知道如何编写一个函数,其中 returns 一个指向函数的指针, returns 一个函数指针,没有 typedef。例如一个函数,其中returns一个函数指针可以定义为:
type (*f_name(..))(..){..}
所以这个 returns 一个指向 returns 一个 '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)
给予
declare g as function (float) returning pointer to function (double, double) returning pointer to function (char) returning int
首先我们编写一个函数,接受一个 int 并返回一个 float。
float First( int f )
{
return ( float )f ;
}
然后我们编写一个函数,它什么都不带,返回一个指针,指向一个带 int 并返回 float 的函数。
这个指针与 First
的类型相同。
float ( *Second( void ) )( int )
{
float (*f)( int ) = First ;
return f ;
}
最后,我们编写了一个函数,它接受一个 char 并返回一个指向函数的指针,该函数不接受任何内容并返回一个指向一个接受 int 并返回 float 的函数的指针。该指针与 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 ) ;