私はこの中国のブログからこの質問を受け取ります http://chenyufei.info/blog/2011-02-28/wrap-c-function-closure-gcc-nested-function/ 著者は C 言語でクロージャを使用したいと考えています。 GCCにはネストされた関数(およびクロージャー)の機能があることがわかりました。 例:
typedef int (*func_t)(int arg);
func_t create_wrap_function(func_t f) {
int wrapped(int arg) {
// call original function
int val = f(arg);
fprintf(log_func_call, "arg: %d ret: %d", arg, val);
return val;
}
return wrapped;
}
少なくとも GCC ドキュメントによると、これを行うべきではありません。
「含まれている関数が終了した後で、ネストされた関数をそのアドレスから呼び出そうとすると、すべての地獄が解き放たれます。」
http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/Nested-Functions.html