函数“ fun”的返回值是意外的
我正在通过编写高阶函数“ funfun”以返回函数“ fun”来学习C
#include<stdio.h>
void* funfun(const int k) {
int fun(const int c) {
//int sum = k + c;
printf("k = %d, c = %d, sum = %d\n", k, c, k + c);
return k + c;
}
return fun;
}
int main() {
int (*ptr)(int) = funfun(3);
printf("%d\n", ptr(2));
return 0;
}
注释“ int sum = k + c;”,则显示意外:
k = 3, c = 2, sum = 5
134513986
保持该行,可以预期显示:
k = 3, c = 2, sum = 5
5
代码的编译和执行如下:
gcc a.c -o a && ./a
gcc -v显示:
gcc version 4.1.2 20080704 (Red Hat 4.1.2-50)
答案 0 :(得分:2)
您正在使用名为Nested Functions的GCC扩展名。
在该文档中,您可以发现不允许您执行操作:
但是这种技术只有在包含功能(在此示例中为hack)没有退出的情况下才有效。
根据您的情况,“包含函数”为funfun
。
如果您在包含函数退出后尝试通过嵌套函数的地址调用嵌套函数,则所有地狱都会崩溃。
C确实没有高阶函数(带有闭包等)。对C的扩展也没有真正提供这些功能。