
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ボタンをクリックすると数が増...
-
サブウインドウから親ウインド...
-
ifreamをリロードしたい
-
【正規表現】【javascript】CR...
-
confirmの連続?
-
Boolean型配列中のTrueの有無を...
-
クラス内からインスタンス先の...
-
【Jquery】changeイベント毎にa...
-
hoge の謎
-
同じ型【ハイフンと数字】だけ...
-
VC++のちらつき防止方法
-
2次元のJSON形式の配列の展開
-
console.logを使用して変数名と...
-
Linux バイナリ実行できない "...
-
ASP+アクセスでのSQLコメントに...
-
HTTPSのとき":"が"%3A"ではなく...
-
構造体を引数で関数へ渡す
-
C言語でクロージャを記述する
-
Vb.netのグローバル変数の宣言...
-
Excel VBA の ChangeFileAccess
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTTPSのとき":"が"%3A"ではなく...
-
ボタンをクリックすると数が増...
-
Boolean型配列中のTrueの有無を...
-
サブウインドウから親ウインド...
-
Linux バイナリ実行できない "...
-
ASP+アクセスでのSQLコメントに...
-
Excel VBA の ChangeFileAccess
-
Vb.netのグローバル変数の宣言...
-
正規表現で半角数字1桁のみを全...
-
Objective-C 変数への代入エラー
-
console.logを使用して変数名と...
-
サンプルによく出てくるhogehog...
-
onclick="" の""を変えることが...
-
ifreamをリロードしたい
-
【Jquery】changeイベント毎にa...
-
クラス内からインスタンス先の...
-
MFCのキャプション変更
-
ひとつ上の階層にアクセスさせ...
-
【正規表現】【javascript】CR...
-
同じ型【ハイフンと数字】だけ...
おすすめ情報
No.2さんの例では、クロージャを「状態を表す構造体」と「関数へのポインタ」
を要素とする構造体で表現していますが、引数に状態を保持した関数として表現
するのとどちらが良いのでしょうか?