语言的嵌套和函数指针
从前有座山,山里有座庙,庙里有个老和尚,他在讲故事。讲的是,"从前有座山,山里有座庙......"。
函数嵌套调用
- 主流编程语言基本没有不支持函数嵌套调用的,从生成机器码或者中间代码而言,这没什么难度。
C/ObjC/C++/Java/C#/Python/JS/Go/Rust/Swift/仓颉/VB 等等都支持。
支持函数定义嵌套的语言
- C语言不允许定义嵌套,但允许调用嵌套(包括递归或非递归),GNU C通过Trampoline实现函数嵌套功能,它是存在于栈上的可执行代码,由运行时动态生成。
- C++11前不允许函数嵌套定义,C++11之后引入lambda表达式,允许在函数内部定义匿名函数,类似于函数定义嵌套。
- Java没有显式函数嵌套定义,但支持函数内部Lambda表达式。
- C#/Python/JS/Ruby/Swift/Kotlin等现代编程语言都支持函数嵌套定义。
- Go/Rust 支持函数内定义匿名函数来支持函数定义嵌套。
嵌套类
- C++/Java/C#/Python 都有嵌套类。
函数指针
函数本身就是一个地址,也算指针,函数指针和函数很像。
函数和函数指针
- C/C++的思路很简单,函数是指针,函数指针也是指针,二者是可以看成一样的。
- func()和(*func)()一样。
- “func;”并不会调用func函数, func()才会调用。
- C++类静态函数和C语言函数类似,假设类名A,&A::static_func代码函数指针。类成员函数需要指明类对象和类函数指针。
- 如void func(A *a, void (A::*show)()) { (a->*show)(); }
支持的语言
- Fortran
- COBOL
- PL/I
- Pascal
- C/C++
- D
- C#
委托
不显式支持指针的编程语言,有的利用委托来模拟函数指针。
类型优化
- 函数指针声明语句比较长,利用typedef定义或重命名函数指针,可以简化代码。
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!