user-0 提问: C 语言实现函数里面定义函数的方法!!!!!!!!!!!!!

回复:
user: user-1
content: 另一种方法是利用嵌入式汇编， 只是不同硬件汇编语言语法不同， 也很难说，这是可移植的。

user: user-2
content: 引用 33 楼 paschen 的回复:http://blog.chinaunix.net/uid-20753645-id-1877932.html  关于 blog 中所说：   #include <stdio.h> #include <stdlib.h>  int fun1(void); int main(int argc, char *argv[]) {     fun1();     return 0; }  int fun1(void) {     printf("in fun1!\n");       void fun2(void) {         printf("in fun2!\n");     }     fun2();     return 0; }   $ gcc --std=c99 test.c $ gcc --std=c99 -pedantic test.c test.c: In function ‘fun1’: test.c:15:6: warning: ISO C forbids nested functions [-Wpedantic]       void fun2(void) {       ^   另见： https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Nested-Functions.html#Nested-Functions gcc 关于 nested-function 的文档 引用一下第一句： 引用A nested function is a function defined inside another function. Nested functions are supported as an extension in GNU C, but are not supported by GNU C++.

user: user-3
content: 没发现C99文档哪里说支持嵌套的函数定义。不但C99没找到，C11也没说。 个人表示莫名其妙、莫名惊诧。  引用 33 楼 paschen 的回复:http://blog.chinaunix.net/uid-20753645-id-1877932.html

user: user-0
content: 引用 20 楼 lm_whales 的回复:C++lamda表达式也可以达到这个目的，估计C++是不会支持了 实在不行，C++还可以在函数内部定义类，结构，可以在他们内部定义函数。  现在只讨论 C 语言里实现函数定义里嵌套函数定义

user: user-0
content: 引用 33 楼 paschen 的回复:http://blog.chinaunix.net/uid-20753645-id-1877932.html   谢谢,终于找到方法了,不过我的实现不是按上面的方法,不过我觉得上面的有道理.

user: user-4
content: http://blog.chinaunix.net/uid-20753645-id-1877932.html

user: user-0
content: 引用 27 楼 DelphiGuy 的回复:[quote=引用 25 楼 linzertling 的回复:] 你坚信跟能不能是两码事，函数里边定义函数本身的语言你给我举出一个试试  Pascal就可以，还有很多其他语言Ada、Algol68、Modula2、Simula67等等。   {$APPTYPE CONSOLE} program test;  function NestedFunc1(): integer;   function NestedFunc2(): integer;     function NestedFunc3(): integer;     begin       result := 1;     end;   begin     result := NestedFunc3 + 1;   end; begin   result := NestedFunc2 + 1; end;  begin   writeln(NestedFunc1); end.  [/quote]    果然是老手,佩服佩服!!!

user: user-0
content: 引用 25 楼 linzertling 的回复:你坚信跟能不能是两码事，函数里边定义函数本身的语言你给我举出一个试试  明天我公布答案,有些事,转换一下思维就可以实现拉!!

user: user-0
content: 引用 26 楼 qwer_boo 的回复:现在就说吧，回复你的人之所以不多，我觉得大家都觉得话题比较无聊~~  在我公布答案之前,你可以发表对这个问题的看法  有的人是不想回复,有的人是没法回复,毕竟这个问题不是简单问题.

user: user-5
content: 引用 28 楼 linzertling 的回复:[quote=引用 27 楼 DelphiGuy 的回复:] [quote=引用 25 楼 linzertling 的回复:] 你坚信跟能不能是两码事，函数里边定义函数本身的语言你给我举出一个试试  Pascal就可以，还有很多其他语言Ada、Algol68、Modula2、Simula67等等。   {$APPTYPE CONSOLE} program test;  function NestedFunc1(): integer;   function NestedFunc2(): integer;     function NestedFunc3(): integer;     begin       result := 1;     end;   begin     result := NestedFunc3 + 1;   end; begin   result := NestedFunc2 + 1; end;  begin   writeln(NestedFunc1); end.  [/quote]  这些个语言我不了解，也不想再了解了，因为在函数里边定义函数本身就没什么意思，这就像是数学里边的复合函数一样，本质还是加减乘除[/quote]  有用，第一是有封装的思想，实现某个功能的函数可能比较复杂、代码量大，需要把它分解成若干函数，写成独立的一系列函数当然也是可以的，但是封装性不好，不如写成一个主函数的子函数好（高内聚）。第二是子函数可以访问它上级（无论多少级）函数的局部变量，这个是并列的若干单独函数做不到的，后者只能用全局变量了。

user: user-6
content: 引用 27 楼 DelphiGuy 的回复:[quote=引用 25 楼 linzertling 的回复:] 你坚信跟能不能是两码事，函数里边定义函数本身的语言你给我举出一个试试  Pascal就可以，还有很多其他语言Ada、Algol68、Modula2、Simula67等等。   {$APPTYPE CONSOLE} program test;  function NestedFunc1(): integer;   function NestedFunc2(): integer;     function NestedFunc3(): integer;     begin       result := 1;     end;   begin     result := NestedFunc3 + 1;   end; begin   result := NestedFunc2 + 1; end;  begin   writeln(NestedFunc1); end.  [/quote]  这些个语言我不了解，也不想再了解了，因为在函数里边定义函数本身就没什么意思，这就像是数学里边的复合函数一样，本质还是加减乘除

user: user-5
content: 引用 25 楼 linzertling 的回复:你坚信跟能不能是两码事，函数里边定义函数本身的语言你给我举出一个试试  Pascal就可以，还有很多其他语言Ada、Algol68、Modula2、Simula67等等。   {$APPTYPE CONSOLE} program test;  function NestedFunc1(): integer;   function NestedFunc2(): integer;     function NestedFunc3(): integer;     begin       result := 1;     end;   begin     result := NestedFunc3 + 1;   end; begin   result := NestedFunc2 + 1; end;  begin   writeln(NestedFunc1); end.

user: user-7
content: 现在就说吧，回复你的人之所以不多，我觉得大家都觉得话题比较无聊~~

user: user-6
content: 你坚信跟能不能是两码事，函数里边定义函数本身的语言你给我举出一个试试

user: user-0
content: 大家好，明天公布 C 语言里如何在函数定义里实现新的函数定义方法  所用的格式就是下面这种  void a(void) {     ....      void b(void)      {          ....      }     .... }   ！！！

user: user-0
content: 引用 22 楼 DelphiGuy 的回复:c的话除了使用gcc编译的话还没有什么好办法，struct那个方法也不适用于c。 就是要在 C 里面实现函数的定义里面定义新的函数！！！  void a(void) {     ....      void b(void)      {          ....      }     .... }

user: user-5
content: c的话除了使用gcc编译的话还没有什么好办法，struct那个方法也不适用于c。

user: user-8
content: 取一个指针，指向一块代码区？然后把整一个结构放在一个函数壳里面吧？

user: user-0
content: 引用 5 楼 paschen 的回复:你可以创造一种语言让他可以，但C标准里没这样的说法  C 语言真的可以实现,而且这种用法符合 C99 标准!!!!!!!

user: user-4
content: 你可以创造一种语言让他可以，但C标准里没这样的说法