[解決済み] 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 回呼び出し、返された値を与えられた配列の要素に代入します。
関連
-
[解決済み] MIPSのネストされたForループと配列の使用
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] setTimeout()コールバックにパラメータを渡すにはどうすればよいですか?
-
[解決済み] 既存のコールバックAPIをプロミスに変換するにはどうすればよいですか?
-
[解決済み] 講師が書いたC言語のファイルは、なぜ最初の行に#が一つ付いているのですか?
-
[解決済み】定義と宣言の違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
警告:代入がキャストなしで整数からポインタを作成する場合の修正方法に関する警告
-
ポインタ定数および定数ポインタ
-
initializer element is not constant "というエラーが表示されるのですが?
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] C言語で%sを正しく使う - 超基本レベル
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] アセンブリがCより速いのはどんなとき?[クローズド]
-
[解決済み] LD_PRELOADのトリックとは何ですか?
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?