C语言中的函数可以嵌套定义并调用??
本帖最后由 蜗牛冲上天 于 2019-12-20 12:34 编辑以前听老师说C语言不支持函数的嵌套定义,只是支持函数的嵌套调用,今天我突然想到了,然后就抱着不能成功的想法试了一下,示例代码如下:
#include <stdio.h>
int main(void) {
int wrapper(void) {
int num1=2;
printf("num1=%d\n",num1);
// C语言支持函数嵌套定义 ?
int wrap(void) {
int num2=3;
printf("num2=%d\n",num2);
return 0;
}
wrap();
return 0;
}
wrapper();
}
我不清楚,这算不算嵌套定义,用的是DEV C++,编译器是GCC 4.9.2
我没有别的编译器,如果你们有的话可以试试,如果可以,是不是C还有别的新的玩法? 本帖最后由 Croper 于 2019-12-20 14:09 编辑
正好手边有Dev-C,试了一下,有点意思。
typedef int (*func_t)(int);
func_t func(int x) {
int flag=1;
int func2(int y){
return x+y;
};
return func2;
}
const int const_var=5;
int main(){
static int global_var;
const char* const_string="Hello World";
int stack_var=5;
int* heap_pointer=(int*)malloc(sizeof(int));
printf("全局变量参考地址:%x\n",&global_var);
printf("常量字符串参考地址:%x\n",const_string);
printf("全局常量参考地址:%x\n",&const_var);
printf("栈区参考地址:%x\n",&stack_var);
printf("堆区参考地址:%x\n",heap_pointer);
printf("代码区参考地址:%x\n",main);
printf("嵌套定义函数参考地址%x\n",func(1));
}
嗯。。基本可以看出,嵌套函数居然是定义在栈里的。。?
那么使用就受到大大的限制了,这个函数仅仅能在父函数中使用,完全不能在外界使用。甚至这种写法理论上都是错的?:
func_t func(int x) {
int flag=1;
int func2(int y){
return x+y;
};
return func2;
}
int main(){
func(2)(3);
}
理论上是错的,虽然我暂时没找到反例,因为是先退栈再调用返回值的,这个时候整个func2函数已经不在栈里了。
Croper 发表于 2019-12-20 14:08
正好手边有Dev-C,试了一下,有点意思。
嗯。。基本可以看出,嵌套函数居然是定义在栈里的。。?
哥 你这个写的有点深入了,我看着有点费劲,不是很懂堆栈原理,我再想想
页:
[1]