• ベストアンサー

callback

コールバック関数ってどうしてコールバックというのでしょう?何を呼び戻すんでしょう?

  • pejun
  • お礼率86% (269/310)

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

  • ベストアンサー
回答No.1

コールバック関数自身がコールバック(呼び戻し)されると言うことです。 ** 例 ** GUI環境で動作するプログラムがあり、そのウィジェット(widget:小さな部品)としてプッシュボタンがあったとします。 プッシュボタンがクリックされると、通常は何かの動作をするわけですが、その動作させたいことをコールバック関数に記述しておき、プッシュボタンが押されたときにコールバック関数が呼び出されるようにしておきます。 プログラムとしてわかりやすいのは、X Window Systemになってしまいますが、gtk+によるコールバック関数がわかりやすいのではないでしょうか。

pejun
質問者

お礼

ありがとうございました 呼び出されるほうがコールバック関数というのですね では呼び出されることがなくて、実体はあったとしてもコールバック関数と呼ぶのでしょうか int testa(a,b){ return(a+b); } //Testb(testa); コメントアウトしたら、testaはコールバック関数ではないということでしょうか? わかりづらくてすみません

その他の回答 (3)

  • fibre102
  • ベストアンサー率20% (6/29)
回答No.4

仕事で書いているプログラムの例です。 A: デバイスドライバ B: Aをコールするモジュール#1 C: Aをコールするモジュール#2 BがAをコールするとき、Aにコールバック関数を引数で渡す。 Aはデバイスアクセス起動。 デバイスアクセス完了後、割り込み発生。 AモジュールはBからもらったコールバック関数をコール。 Cだったら、Cからもらったコールバック関数をAがコールすることになります。 こんなイメージだと思います。

pejun
質問者

お礼

なんとなくわかりました ありがとうございました

回答No.3

#1に回答したものです。 コールバック関数は、プログラム中から普通に呼び出されるのではなくて、GUI環境から(正確にはオペレーティングシステムから)呼び出されます。 わたしの使っているシステム(X Window System)では、 1. 関数の定義(特にコールバック関数であることは明記しない) 2. 1.で定義した関数がどのイベント(プッシュボタンが押されたとかチェックボックスがチェックされたとか)で「コールバック」されるかを定義 … シグナルコネクト(signal connect)と言います。 の2つのコードが必要になります。 ** 例 ** // ボタン押されたときの関数 void button_pushed (GtkWidget *widget, gpointer *data) { g_print ("Button was pushed.\n"); } int main (int argc, char *argv[]) { ..... // 先に定義したbutton_pushed()と"clicked"(ボタンがクリックされたら)を関連付ける。 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (button_pushed), NULL); ..... gtk_main (); return 0; }

pejun
質問者

お礼

なんとなくわかりました ありがとうございました 2度もありがとうございました

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

コールバックの意味自体は、既に回答が出ていますが、具体例を試すのは割と簡単です。 例えば、atexitで登録する終了時関数やsignalで登録するシグナル処理ルーチンがそうです。こういったものであれば、10行程度のプログラムで確認できると思います。 #include <stdio.h> #include <stdlib.h> void callback(void) { puts("callback"); } int main(void) {  atexit(&callback);  return 0; }

pejun
質問者

お礼

わかりやすいご説明ありがとうございました

関連するQ&A

  • sendRequestのcallback

    以前に「プルダウンメニューの利用」で質問させてもらった者です。 Ajaxを使ってのPHPとの連携のため、sendRequestを使用しました。以下がJavaScriptになります。 function test(oj) { sendRequest( on_loaded1, //コールバック関数 'data='+oj.value, //データ 'GET', // HTTPメソッド 'net.php', //URL true, //非同期 true //強制ロード ) } net.phpにデータを送信し、計算をします。 net.phpからはreturnで以下のような配列を返します。 return $array($RaD, $RaM, $RaS, $DecD, $DecM); 返還された値をcallback関数、以下のような関数で受け取っています。 function on_loaded1(oj){ var res = new Array(); res["RaD","RaM","RaS","DecD","DecM"] = oj.responseText document.forms["atai"].elements["RaD"].value = res alert(res); } しかし、alertには何も表示されないため、値が帰ってきていません。 callback関数の使い方がいまいち判らないので、ご教授いただければと 思い質問させていただきました。 よろしくお願いします。

  • PHPにおいて

    コールバック関数とはどのようなものをさすのでしょうか? 配列を扱う関数の第二引数によく関数を渡すものがありますよね? array_walkやusortなどですが この引数に渡す、関数がコールバック関数なのでしょうか? だとしても、いまいちピンときません。 引数に関数を渡してなぜそれがコールバック関数とよばれるものになるのでしょうか? コールバック関数の動きとはどのようなものなのでしょうか? (特定の関数が実行されたときに、 引数に渡された、関数が、その特定の関数内で実行されることが コールバックという動作なのでしょうか?) 以下、URLとうにコールバック関数を渡せる一覧がありました。 http://tm.root-n.com/programming:php:etc:callback_function

    • ベストアンサー
    • PHP
  • C++別のオブジェクトからメンバ関数をコールバック

    自作のタイマオブジェクトにコールバックしたい別のオブジェクトのメンバ関数(複数)を登録して、一定時間経過後にコールバックしたいです。 今、考えているのはタイマオブジェクトでコールバック関数を呼び出す関数を仮想関数にして、継承したサブクラスごとにどのコールバック関数を呼び出すか処理を変えるやり方です。 ただ、これだと何だか複雑になりそうですし、そもそも根本的なところが間違っている気もします。 ご助言いただきたいです。 よろしくお願いします。

  • コールバックって・・・

    コールバックって・・・ はじめまして、質問があります。 コールバックとはどういう意味でしょうか? コールバックは普通の関数呼び出しと何か違いがありますか。 [現在のイメージ] ・下位関数が上位の関数をコールすること ・マルチタスクでないと使用できない ・イベントドリブンでないと使用できない ・割り込み的なもの? ご存知の方いらっしゃいましたら、どうか御教授ください。

  • コールバック関数について

    コールバック関数の意味は、 特定の条件が成り立った時に呼び出してもらうだと思うんですが、 コールバック関数を使うメリット・利点は何なんでしょうか?

  • コールバック関数とは…(C言語)

    関数をコールバックするのと、 関数を直接呼ぶのとではどう違うのでしょうか? ※質問がおかしかったらすいません。

  • SIGALRMでプロセス終了

    SIGALRMが跳ねると登録してあるコールバック関数が呼ばれるのですが、その関数の処理後にプロセスが終了してしまいます。その理由が知りたいので教えてください。 実行してみると -------------------------------- callback_start .....コールバック関数のprint分を実行 callback_end .....コールバック関数のprint分を実行 アラームクロック -------------------------------- 3行目のメッセージがどこからか出力されます。 ちなみにdbxでコールバック関数を止めてみると 関数内の1行目でnextを実行すると -------------------------------- シグナル 14 (SIGALRM) で終了中 -------------------------------- と出力されます。 マシンはSolaris8でC言語です。 シグナルのマスク処理等はなにもなく、signal()関数が呼ばれているだけです。 よろしくお願いします。

  • コールバック関数と、再帰関数の違いってなんですか?

    コールバック関数と、再帰関数の違いってなんですか?

  • jQueryのコールバック関数の実行順序について

    いつもお世話になっております。 jQueryのコールバック関数について質問させて下さい。 jQueryの関数には引数としてコールバック関数を取るものがありますが、これらの実行順序で悩んでいます。 実行順序に関して、呼び出し元関数の実行が完了した後にコールバック関数が実行されるという認識で間違いないでしょうか? 以前、実行順序は保証されないという記述を見たのですが、どこで見たのか失念してしまい、再度読み直す事ができないでいます。 以上の事に関してご教授下さい。 宜しくお願い致します。

    • ベストアンサー
    • AJAX
  • 【php】コールバック関数ってなんですか?

    【php】コールバック関数ってなんですか? コールバック関数ってどういうものなのでしょうか? 個人的になイメージでは このライブラリの、このボタンを押した時 hoge()という関数が実行されるように設計しておいたから ボタンを押した時に何か動作が必要な場合は hoge()という名前で関数を定義しておいてね。 みたいな感じでしょうか?

    • ベストアンサー
    • PHP