2011-09-30 45 views
1

这个函数原型是怎么回事?显然带有某种强制类型转换的空参数是混乱...C-奇怪的原型参数

int *my_func(my_struct *m, void (*m_op)(my_struct *v, void arg)); 
+3

在你最喜欢的C语言书中查找“函数指针”。 –

+0

http://cdecl.org –

回答

10

的第二个参数的功能my_func是指向不返回值(void)的功能,但它有两个参数,一个my_struct指针和...和(无效)void。后者应该可能是void *arg;您不能拥有void类型的变量或参数。就目前来看,代码不应该编译。

1

该原型声明函数my_func,返回int *。它有两个参数,第一个是my_struct *,第二个是奇怪类型void (*)(my_struct *, void)。这意味着第二个参数是一个指向函数的指针,该函数返回void并带有2个参数本身,指向my_structvoid(我认为这是一个错字,它需要void *)。

0

我的建议 - 总是尝试将声明拆分成更小的声明 - 在这种情况下,代码将更具可读性。在这种情况下,你可以重新写代码:

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*),或其他任何东西。只需简单地投射指针。

0

This little article解释了如何解析螺旋状运动中的C声明。相反,构建是完成的。