gpt4 book ai didi

C 中的闭包 - 这行得通吗?

转载 作者:行者123 更新时间:2023-12-02 08:33:37 25 4
gpt4 key购买 nike

我开始学习函数式编程,想看看我是否可以在 C 中使用闭包。为了重现 Wikipedia - Closures 中的第一个示例我编写了以下代码:

#include <stdio.h>

void closure (int(** f)(int), int *x) {
int fcn(int y) {
return *x + y;
};
*f = fcn;
}

int main()
{
int x = 1;
int(* f)(int);

closure(&f, &x);

printf("%d", f(2));

return 0;
}

它已编译(gcc 4.8.2。在 Ubuntu 14.04 上。)并且它可以工作,它打印出 3。由于我缺乏 C 方面的专业知识(只有大学基础类(class)),我的问题是,是否有严重的问题这段代码有问题吗?我被教导函数定义应该是全局的,我从没想过它会起作用......

编辑:为什么会这样,当我像这样更改主要功能时:

int main()
{
int x = 1;
int(* f)(int);

closure(&f, &x);

printf("%d", f(2));
printf("%d", f(3)); // the only difference

return 0;
}

我遇到段错误?

最佳答案

您的代码可以运行,因为 gcc 具有支持嵌套函数的语言扩展。

但是,在标准 C 中,您不能在另一个函数中定义一个函数。

Gnu Nested Functions

If you try to call the nested function through its address after the containing function exits, all hell breaks loose. If you try to call it after a containing scope level exits, and if it refers to some of the variables that are no longer in scope, you may be lucky, but it's not wise to take the risk. If, however, the nested function does not refer to anything that has gone out of scope, you should be safe.

关于C 中的闭包 - 这行得通吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24217853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com