Help us understand the problem. What is going on with this article?

コールバック関数

More than 5 years have passed since last update.

正直、こうしてまとめておくほどの内容ではないとは思うのですが。
まあ一応、誰かの助けになるかもしれないし。

とりあえず言語はCで。

これはコールバック関数なのか?

人の書いたソースを読んでいて、hogehoge_callback()という関数が出て来た。
名前からコールバック関数だと思ったのだが、どうにもその使われ方が、コールバック関数っぽくない。

コールバック関数ってなんだっけ?

そも、私のコールバックに関する認識が合ってるのか?
ちょっとコールバック関数がゲシュタルト崩壊してきたので、ググってみる。

wikipedia コールバック_(情報工学)

ううん、わかったような、わからないような……。
つまり、関数ポインタに渡される関数がコールバック関数である、と?

でもさー、別に普通の関数呼び出しじゃいけないのん?
そりゃあね、

イベントの発生を検知するための処理と、そのイベントが起こった時に実行すべき個々の処理を分離して記述することができる。
e-Words コールバック関数

ていうのはあるかもしれんけど。
非同期で呼び出されるならともかく、同期で呼び出されるなら普通の関数呼び出しで良くね?

呼び出した側、呼び出された側、どっち?

で、グーグル先生と相談してみたら、こういう解説を見つけた。

2010-09-09 コールバックの薦め

「呼び出し返す」とはつまり「(関数を)呼び出し返す」ということです
この「呼び出し返される関数」のことを「コールバック関数」と言います
……
またもう一つここで注目して欲しいのは「呼び出した側」と「呼び出された側」という2つの主体が存在していることです
……
「コールバック」と言うためには、そこに意味上の分断がある必要があります
……
即ち、その境界を越えて「呼び出された側」から「呼び出した側」へと「コール」し返す行為を「コールバック」と言うのです
ですから「コールバック」というのは「ある意味上の境界を越えて境界を越えてコールバック関数を呼び出す行為」であるとも言えます
そして意味上の境界を越えて処理が戻ってくるわけですから呼び出し返される「コールバック関数」というのは「呼び出した側」の主体に属するものであるということもわかります
「呼び出した側」の主体に属するのですから「コールバック関数」は「呼び出す側」が指定すべきものであるということもわかりますね

なーるーへーそー。
この説明なら納得出来ます。
ありがとうございました。

で、結局、これはコールバック関数なのか?

結論から言うと、見ていたソースでは、以下の二つの意味でXX_callback()という関数名が使われていた。

  1. (後で関数を)コールバック(してもらう事を依頼する)関数
  2. (本来の意味での)コールバック関数

ううん、これ、1に関しては、少なくとも引数の数と種類が同じなら、一つの関数にまとめておくべきだよね……。

以上。

megane814
なんちゃって組み込みエンジニア。下回りの仕事ができる日を目指して頑張るっす。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした