C 如何前向声明将函数指针作为参数的函数?
如何在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
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你的括号不匹配。你试过了吗?”?