
No.3ベストアンサー
- 回答日時:
クロージャーとは、状態と紐づいた関数です。
ご提示の処理の場合は、
スコープ内の変数 x を状態として紐づいた関数がクロージャーです。
言語仕様にクロージャーが無い場合は、
関数の引数に状態を渡すことで疑似的に紐づけましょう。
/* 状態を表す構造体 */
typedef struct { int x; } counter_t;
/* 第1引数に状態を指定 */
int counter(counter_t* self, int n) {
_ self->x += n;
_ return self->x;
}
void main() {
_ counter_t p = { 1 }; /* 状態を生成 */
_ counter(&p, 1); /* 状態と紐づいた関数実行 -> 2 */
_ counter(&p, 2); /* 状態と紐づいた関数実行 -> 4 */
_ counter(&p, 3); /* 状態と紐づいた関数実行 -> 7 */
}
No.4
- 回答日時:
厳密な意味でのクロージャーを実現するならば状態と関数ポインタの両方を保持しましょう。
ただし厳密な実装を目指すとなると使い勝手が悪くなりがちです。クロージャーっぽく便利に書きたいだけなら状態のみに留めましょう。できることに制限はありますが使い勝手は悪くないので実用的です。
No.2
- 回答日時:
C言語でクロージャ:
https://nihemak.hatenablog.com/entry/20100215/12 …
> 後、C言語の関数にはクロージャの機能は無いという理解で良いのですよね?
ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Javascript クロージャの動きがよくわからないです 3 2021/11/14 22:30
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- 英語 英語のsvoc型の説明で cはvの「支配下」でOを修飾する と書いてありましたが 支配下と言う言葉に 1 2021/11/13 10:41
- PHP 引数とは なんですか? 2 2021/12/30 07:08
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 英語 黒人英語 2 2021/12/09 13:02
- C言語・C++・C# C#のラムダ式に関する質問です 2 2021/12/19 23:04
- ネットワーク 回線を体系的に勉強する方法。 ネットワークを勉強している者です。 ネットワークを「体系的に」学習する 3 2022/11/26 20:36
- 弁護士・行政書士・司法書士・社会保険労務士 刑法についてです 1 2021/11/01 19:47
- PHP printが「ダブルスタンダード」にならないのはなぜ? 2 2021/12/21 05:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現で半角数字1桁のみを全...
-
ASP+アクセスでのSQLコメントに...
-
ひとつ上の階層にアクセスさせ...
-
サブウインドウから親ウインド...
-
データ整理のシェルスクリプト
-
ShellExecuteでURLのアドレ...
-
プログラミングのペーパーテス...
-
ボタンをクリックすると数が増...
-
C#テキストボックスの文字を配...
-
関数でy=g(x)のgとは何の略です...
-
特定文字列を消したい
-
JavaScript window.openで開く...
-
idを使わずにonclickで自身の要...
-
コンストラクタでvar ?
-
JavaScriptでセンター表示で行...
-
java keyを配列で表記したい
-
同じIDで定義した要素の配列を...
-
文字列で条件分岐
-
window.openでタイトル名の指定
-
java scriptでの表示件数の制御...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Boolean型配列中のTrueの有無を...
-
HTTPSのとき":"が"%3A"ではなく...
-
ボタンをクリックすると数が増...
-
Linux バイナリ実行できない "...
-
ASP+アクセスでのSQLコメントに...
-
Excel VBA の ChangeFileAccess
-
アンカーリンクをクリックさせ...
-
javascriptで文字挿入でtoggle...
-
ifreamをリロードしたい
-
static と externについて
-
同じ型【ハイフンと数字】だけ...
-
【正規表現】【javascript】CR...
-
System::Drawing::Color::XXXX...
-
MFCのキャプション変更
-
VB.NETで変数の型は自作...
-
【Jquery】changeイベント毎にa...
-
サブウインドウから親ウインド...
-
Vb.netのグローバル変数の宣言...
-
window.onloadでのfunction
-
hogehogeの由来
おすすめ情報
No.2さんの例では、クロージャを「状態を表す構造体」と「関数へのポインタ」
を要素とする構造体で表現していますが、引数に状態を保持した関数として表現
するのとどちらが良いのでしょうか?