[解決済み] エラー void 式の無効な使用
2022-02-18 09:28:54
質問
ある関数
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ポインターとして、何を渡せばいいのかわかりません。これは私にエラーを与えている。何かアイディアがあれば教えてください。
解決方法は?
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);
関連
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】LEALアセンブリ命令は何をするのですか?
-
[解決済み] テスト
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み】argv[]をint型として取得するには?
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。