1. ホーム
  2. c

[解決済み] エラー void 式の無効な使用

2022-02-18 09:28:54

質問

ある関数 int rt_task_start (RT_TASK *task, void(*task_func)(void *arg), void *arg) ここで、第二引数で、私は引数で関数を渡しています。

  1. この時、関数名だけを渡すと問題ありません(予想通り動作しています)。 rt_task_start(&demo_task1, demo, 1);
  2. しかし rt_task_start(&demo_task1, demo(&val), 1); というエラーが発生します。 error: invalid use of void expression . 変数valは前に定義されています。 int val = 0;
  3. このように呼び出すと 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 .
  4. int *val; *val = 0; rt_task_start(&demo_task1, demo(&val), 1); もエラーになります。

voidポインターとして、何を渡せばいいのかわかりません。これは私にエラーを与えている。何かアイディアがあれば教えてください。

解決方法は?

void (*task_func)(void *arg);

上記のステートメントで定義された task_func という型のポインタを取る関数へのポインタであることを示します。 void * であり、値を返さない。

そのため、関数を呼び出す際に rt_task_start 第2引数には、関数へのポインタを渡してください。また、第2引数には、関数へのポインタを渡してください。 void * を第3引数として与えます。整数ではありません。関数名はその関数へのポインタとして評価されるので、単に関数名を引数として渡すこともできますし、Address-of 演算子を使うこともできます。 & を関数名の前に置く。

int arg = 4;

// both calls are equivalent

rt_task_start(&demo_task1, demo, &arg);
rt_task_start(&demo_task1, &demo, &arg);