这个函数原型是怎么回事?显然带有某种强制类型转换的空参数是混乱...C-奇怪的原型参数
int *my_func(my_struct *m, void (*m_op)(my_struct *v, void arg));
这个函数原型是怎么回事?显然带有某种强制类型转换的空参数是混乱...C-奇怪的原型参数
int *my_func(my_struct *m, void (*m_op)(my_struct *v, void arg));
的第二个参数的功能my_func
是指向不返回值(void
)的功能,但它有两个参数,一个my_struct
指针和...和(无效)void
。后者应该可能是void *arg
;您不能拥有void
类型的变量或参数。就目前来看,代码不应该编译。
该原型声明函数my_func
,返回int *
。它有两个参数,第一个是my_struct *
,第二个是奇怪类型void (*)(my_struct *, void)
。这意味着第二个参数是一个指向函数的指针,该函数返回void并带有2个参数本身,指向my_struct
和void
(我认为这是一个错字,它需要void *
)。
我的建议 - 总是尝试将声明拆分成更小的声明 - 在这种情况下,代码将更具可读性。在这种情况下,你可以重新写代码:
typedef struct {} my_struct;
typedef void (* m_op_function)(my_struct * v, void * arg);
int * my_func(my_struct * m, m_op_function f);
正如大家说 - 这几乎是99.99%错字这里就以m_op_function-有可能第二个参数void*
- 这样就可以传递任何指针它 - 它是(char*), (int*), (my_struct*)
,或其他任何东西。只需简单地投射指针。
This little article解释了如何解析螺旋状运动中的C声明。相反,构建是完成的。
在你最喜欢的C语言书中查找“函数指针”。 –
http://cdecl.org –