是否可以声明一些func_t返回该类型的函数类型,func_t?
换句话说,函数是否可以返回自身?
// func_t is declared as some sort of function pointer
func_t foo(void *arg)
{
return &foo;
}
Run Code Online (Sandbox Code Playgroud)
或者我必须使用void *和类型转换?
oua*_*uah 15
不,你不能在C中声明递归函数类型.除了在结构(或联合)内部,在C中声明递归类型是不可能的.
现在对于void *解决方案,void *只保证保存指向对象的指针而不是指向函数的指针.能够转换函数指针,void *仅作为扩展名提供.
Dre*_*wen 13
结构的可能解决方案:
struct func_wrap
{
struct func_wrap (*func)(void);
};
struct func_wrap func_test(void)
{
struct func_wrap self;
self.func = func_test;
return self;
}
Run Code Online (Sandbox Code Playgroud)
编译gcc -Wall没有给出任何警告,但我不确定这是否是100%便携式的.