为什么C语言不支持函数重载?非得重载怎么办?

2026-04-27 21:5546阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐

不支持 C语言本身不直接支持函数重载C语言中不Neng出现函数名相同但参数列表不同的两个函数,也就是说不Neng有函数重载的情况。然......

换个角度。 只是这事儿真的让人头大!你知道那种感觉吗?就是你满怀激情地打开编辑器, 准备大展身手写点牛逼的代码,后来啊发现连个Zui基本的“同名不同参”dou被限制了!这就好比你去买咖啡, 服务员告诉你只有一种杯子,不管你要大杯还是小杯,不管是拿铁还是美式,统统只Neng装在这个该死的固定大小的容器里!简直是不可理喻!

为什么C语言拒绝函数重载?非要重载怎么Zuo?

躺赢。 我们要搞清楚为什么这老古董语言这么顽固。C语言诞生于上个世纪70年代,那时候电脑大得像房子一样,内存小得可怜。丹尼斯·里奇那帮大佬设计这门语言的时候,追求的是极致的简洁和高效,根本没想那么多花里胡哨的东西。

到底是哪个环节出了问题?——符号表的锅

说白了就是链接器太蠢了!真的太蠢了!函数的名字在编译成目标文件后通常就是原样保留的。如guo你写了一个 `void print` 和一个 `void print`, 到了底层符号表里它们的名字可Neng统统dou变成了 `_print`。

这时候链接器就懵圈了。它一kan,“嘿,这里有两个 `_print`”,它根本分不清你到底想调用哪一个。主要原因是它只kan名字,不kan参数类型!这就是所谓的名字修饰机制的缺失。C++是怎么Zuo的?人家聪明啊, 把参数类型也编码进了名字里比如 `_print_int` 和 `_print_float`,这样链接器就Neng一眼kan穿你的小心思。

闹乌龙。 可是C语言就是不干!它就觉得你应该自己把名字取好别捣乱。这种设计哲学在某些人眼里是“克制”,在我眼里简直就是死脑筋!我dou不知道为了改函数名浪费了多少脑细胞。

这种设计背后的那些陈芝麻烂谷子

有人可Neng会说:“哎呀, 你不懂,这样是为了兼容性。” 是是是万物皆可兼容。

阅读全文

不支持 C语言本身不直接支持函数重载C语言中不Neng出现函数名相同但参数列表不同的两个函数,也就是说不Neng有函数重载的情况。然......

换个角度。 只是这事儿真的让人头大!你知道那种感觉吗?就是你满怀激情地打开编辑器, 准备大展身手写点牛逼的代码,后来啊发现连个Zui基本的“同名不同参”dou被限制了!这就好比你去买咖啡, 服务员告诉你只有一种杯子,不管你要大杯还是小杯,不管是拿铁还是美式,统统只Neng装在这个该死的固定大小的容器里!简直是不可理喻!

为什么C语言拒绝函数重载?非要重载怎么Zuo?

躺赢。 我们要搞清楚为什么这老古董语言这么顽固。C语言诞生于上个世纪70年代,那时候电脑大得像房子一样,内存小得可怜。丹尼斯·里奇那帮大佬设计这门语言的时候,追求的是极致的简洁和高效,根本没想那么多花里胡哨的东西。

到底是哪个环节出了问题?——符号表的锅

说白了就是链接器太蠢了!真的太蠢了!函数的名字在编译成目标文件后通常就是原样保留的。如guo你写了一个 `void print` 和一个 `void print`, 到了底层符号表里它们的名字可Neng统统dou变成了 `_print`。

这时候链接器就懵圈了。它一kan,“嘿,这里有两个 `_print`”,它根本分不清你到底想调用哪一个。主要原因是它只kan名字,不kan参数类型!这就是所谓的名字修饰机制的缺失。C++是怎么Zuo的?人家聪明啊, 把参数类型也编码进了名字里比如 `_print_int` 和 `_print_float`,这样链接器就Neng一眼kan穿你的小心思。

闹乌龙。 可是C语言就是不干!它就觉得你应该自己把名字取好别捣乱。这种设计哲学在某些人眼里是“克制”,在我眼里简直就是死脑筋!我dou不知道为了改函数名浪费了多少脑细胞。

这种设计背后的那些陈芝麻烂谷子

有人可Neng会说:“哎呀, 你不懂,这样是为了兼容性。” 是是是万物皆可兼容。

阅读全文