语言的嵌套和函数指针

从前有座山,山里有座庙,庙里有个老和尚,他在讲故事。讲的是,"从前有座山,山里有座庙......"。

函数嵌套调用

  • 主流编程语言基本没有不支持函数嵌套调用的,从生成机器码或者中间代码而言,这没什么难度。
    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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值