【发布时间】:2014-05-09 01:07:24
【问题描述】:
我有一个函数int rt_task_start (RT_TASK *task, void(*task_func)(void *arg), void *arg)
在第二个参数中,我正在传递一个带参数的函数。
- 当我当时只传递一个函数名时没有问题。(正如预期的那样)。
rt_task_start(&demo_task1, demo, 1); - 但是当我通过
rt_task_start(&demo_task1, demo(&val), 1);时,它给了我错误error: invalid use of void expression。变量 val 是之前定义的。int val = 0; - 当我用这个
rt_task_start(&demo_task1, demo(val), 1);打电话时,这显示错误Warning passing argument 1 of 'demo' makes pointer from integer without a cast然后是error: invalid use of void expression。 -
int *val; *val = 0;rt_task_start(&demo_task1, demo(&val), 1);这也给了我错误。
我不明白我应该传递什么,作为一个 void 指针。它给了我错误。请有任何想法!
【问题讨论】:
-
你对这个功能的意图是什么?您希望第二个参数是函数指针还是不同的数据类型?不能同时是两者。此外,
int *val; *val = 0;可能会产生分段错误,因为您将值分配给未定义的地址位置。 -
@mbratch thanx 指出我,我想要第二个函数只是一个函数指针。实际上我对第二个参数
void(*task_func)(void *arg)它可以采用什么类型的参数感到困惑。我虽然我也可以发送参数,但对于完全不正确的案例 2、3、4。