1. ホーム
  2. c

[解決済み] C言語における「コールバック」とは何か、どのように実装されているのか?

2022-04-23 07:20:47

質問

私が読んだ限りでは、Core Audioはコールバックに大きく依存しています(C++もそうですが、それはまた別の話です)。

あるタスクを達成するために、別の関数から繰り返し呼び出される関数を設定するというコンセプトは(なんとなく)理解できました。 ただ、それらがどのようにセットアップされ、実際にどのように動作するのかが理解できません。 何か例があれば教えてください。

どのように解決するのですか?

C言語には、他の一般的なプログラミング概念と同様に、"callback"は存在しません。

関数ポインターを用いて実装されています。以下はその例です。

void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++)
        array[i] = getNextValue();
}

int getNextRandomValue(void)
{
    return rand();
}

int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
    ...
}

ここで populate_array 関数は、3番目のパラメータとして関数ポインタを受け取り、それを呼び出して配列に代入する値を取得します。コールバックは getNextRandomValue このポインタは、ランダムな値を返し、そのポインタを populate_array . populate_array は、コールバック関数を 10 回呼び出し、返された値を与えられた配列の要素に代入します。