Eri*_*ang 3 c recursion compilation function declare
从adream307得到一个问题,我不知道,你呢?
我想声明一个这样的函数:(我们将这种类型的函数命名为F)
- F的返回类型是"无效"
- F的参数是一个函数指针,该指针指向一个类型与F相同的函数
我可以声明这样的函数吗?
你不能.该类型无法表达,因为它会重复:
void f(void g(void h(...
Run Code Online (Sandbox Code Playgroud)
但是你可以编写一个接受自己的函数,没有任何问题.考虑
void f(void g()) { }
int main(void) { f(f); }
Run Code Online (Sandbox Code Playgroud)
那很好.参数类型f是函数指针(void g()在此等效void (*g)()),其类型与类型兼容f.兼容f调用参数和参数的函数类型的规则,void()并void (void())指定为:
如果一个类型具有参数类型列表[调用参数]而另一个类型由函数声明符指定,该函数声明符不是函数定义的一部分并且包含空的标识符列表[函数参数类型],则参数列表不应该有一个省略号终结符,每个参数的类型应与默认参数促销的应用类型兼容.
两种类型都满足此兼容性规则,因此函数调用已明确定义.