解決済み

これはキャスト?が行われているのでしょうか?

  • 困ってます
  • 質問No.264615
  • 閲覧数31
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 64% (37/57)

kijinと申します。Linuxカーネルのプログラムを読んでいて以下のことに疑問を持ってしまいました。

例えば、

extern void task_exit( void ); /*外部関数参照宣言*/

void (*TaskExit)(void)=&task_exit;

という表現があった場合、1行目はよくわかるのですが、
2行目はどういう処理になるのでしょうか?
「task_exit」のアドレスを「*TaskExit」に渡している
のでしょうか?であるとしても、TaskExit という変数は
プログラム内のどこにも宣言されていません。
以上、お分かりになる方いらっしゃいましたら、お教え
くださいませ。
よろしくお願いいたします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル10

ベストアンサー率 61% (70/113)

ただの関数ポインタの宣言&代入だと思いますが。
引数も戻り値もない関数へのポインタTaskExitを宣言して、
task_exitのアドレスを代入しています。
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全2件)

  • 回答No.2
レベル7

ベストアンサー率 41% (7/17)

これは関数へのポインタを宣言してそこに関数のアドレスをセットしていますね。

なので2行目が宣言&代入(初期化)しています。

この後に
TaskExit();

とやるとtask_exit()が実行されます。
  • 回答No.3
レベル14

ベストアンサー率 30% (2593/8599)

> TaskExit という変数は、プログラム内のどこにも宣言されていません。

2行目自身が*TaskExitと言うポインターの宣言です。同時に初期値のセットも行なっています。
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ