C 如何前向声明将函数指针作为参数的函数?

C 如何前向声明将函数指针作为参数的函数?,c,forward-declaration,C,Forward Declaration,如何在C中正向声明一个以函数作为参数的函数 以下是函数: void start_thread (void* function (void*)) { ... } 我试图将其声明为: void start_thread (void*); 以及: void start_thread (void* (void*)); 以及: 这些都没有被接受。此函数的正确转发日期是什么 编辑: 收益率: Compilation error prog.c: At top level: prog.c:13

如何在C中正向声明一个以函数作为参数的函数

以下是函数:

void start_thread (void* function (void*)) {

    ...

}
我试图将其声明为:

void start_thread (void*);
以及:

void start_thread (void* (void*));
以及:

这些都没有被接受。此函数的正确转发日期是什么

编辑:

收益率:

Compilation error
prog.c: At top level:
prog.c:135:6: error: conflicting types for 'start_thread'
 void start_thread (void* function (void*)) {
      ^
prog.c:25:6: note: previous declaration of 'start_thread' was here
 void start_thread (void (*) (void *));
      ^

使用挡风玻璃雨刮器技术(左-右-左…):

它是一个指针,因此有一个
*
。在函数上,所以
(*)

它返回
void
,因此,
void(*)

它需要一个
void*
,所以
void(*)(void*)


原型是
void start_线程(void(*)(void*)

正确的转发声明/原型应为:

void start_thread(void*(void*);

对于您拥有的函数定义:

void start_thread (void* function (void*)) {
参数是一个函数,它接受一个
void*
作为参数,并返回一个
void*
。为了更清楚地定义,应该是:

void start_thread (void *(*function)(void*)) {
void start_thread (void *(*)(void*));
因此,宣言应该是:

void start_thread (void *(*function)(void*)) {
void start_thread (void *(*)(void*));

void(*)(void*)
。剩下的可以在你选择的C语言书中找到。奥拉夫说的。如果您想为tha函数提供一个名称(出于文档目的):
void(*functionName)(void*)
你差点就到了chodobaggins,只缺少了一组括号。typedef是你的朋友,这是我对一个类似问题的最喜欢的回答编译错误prog.c:在顶层:prog.c:135:6:错误:“开始线程”void start_线程的类型冲突(void*函数(void*)){^prog.c:25:6:注意:前面的“开始线程”声明在这里是void start\u thread(void(*)(void*);还有一个额外的
*
(或者您错过了一个
*
)在返回类型中,在从注释和两个答案中收到正确的原型后,您似乎忘记更正您尝试编译的代码中的早期或后期声明。请参阅:。“事实并非如此,这些答案是错误的;我发布的答案是编译正确的答案。你试过了吗?或者你只是这么说,然后根据你的期望对我的答案进行了向下投票?。我的代码完全按照上面的方式编译,运行得很好。@ClintonJ你的括号不匹配。你试过了吗?”?