为什么C语言不支持重载,C++支持重载???

原创 2018年04月15日 10:15:21

首先,我们得知道,什么是函数的重载?

函数的重载:
在同一个作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不同),返回值可同可不同。

那么问题来了,为什么C语言不支持重载,C++支持重载呢?
我们先来看看,编译的整个过程:
这里写图片描述

实例分析:
比如一个函数声明如下:

void function(float x,float y);
  • 在C语言中,编译器进行编译之后,在库中的名字为:_function
  • 在C++中,编译器在进行编译之后,在库中的名字为:_function _int_int

再来看另一个函数的声明:

void function(float x,float y);
  • 在C语言中,编译器进行编译之后,在库中的名字为:_function
  • 在C++中,编译器在进行编译之后,在库中的名字为:_function_float_float

编译器在链接的阶段,都是找到相应的函数名,进行链接。
在C语言中,两个函数的名字一样,就会在链接时报错。
在C++中,两个函数饿名字不相同,就不会报错。



好了,我们来总结一下这个问题,为什么C语言不支持重载,C++支持重载呢?

  • C语言,在符号表中的函数标识是函数本身,就会存在两个同名函数。
  • C++,不是用原生的函数名,是函数名+参数(c++有函数名修饰规则,函数名+类型一起决定)

《C语言/C++学习指南》单步调试

-
  • 1970年01月01日 08:00

为什么c++支持重载而C语言不支持重载

学过C语言和C++的人都知道, C++支持函数重载而C语言不支持函数重载。 而所谓的函数重载就是指: 在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同或类型不同),返回值可同可不同。...
  • simplehap
  • simplehap
  • 2016-12-17 17:43:51
  • 2213

C语言支不支持重载?

首先这个问题的答案是C++支持函数重载而C语言不支持函数重载。下面我们从程序编译链接阶段看看其中的原因。   先看看重载的定义,函数重载就是指:   在同一作用域类,一组函数的函数名相同,参数列表...
  • FX677588
  • FX677588
  • 2017-04-17 09:50:03
  • 1293

C语言和C++的区别(函数重载)

C和C++的区别主要分为三部分:   接下来详细介绍一下函数部分的区别 1、返回类型   2、参数列表 此外,在C++中还支持缺省参数,而C语言不支持。 什么是缺省参数呢? ...
  • guaiguaihenguai
  • guaiguaihenguai
  • 2017-10-02 13:32:21
  • 140

为什么c++支持重载而c不支持?

c++ C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同...
  • ddcodingya
  • ddcodingya
  • 2018-03-19 19:26:02
  • 21

为什么C++支持函数重载

对于C++语言作为一种欲与C兼容的语言,C++语言保留了一部分过程式语言和特点,foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++语言就是靠这种机制来实现函数重载的。 ...
  • u014082714
  • u014082714
  • 2015-03-03 20:28:31
  • 1032

为什么 Python 不支持函数重载?

这个问题,最近在 cpyug 上面讨论得很火热。我简要概括一下。 为了考虑为什么 python 不提供函数重载,首先我们要研究为什么需要提供函数重载。 函数重载主要是为了解决两个问题。 ...
  • rommi
  • rommi
  • 2016-04-26 19:31:52
  • 556

C语言重载宏函数的小技巧

在写C/C++语言时我们经常会用到宏定义,宏函数就是带参数的宏定义(blablabla……省去背景介绍)。 有时候我们会需要一个可以有多种参数版本的宏定义,例如: 12#define ...
  • lmhuanying1012
  • lmhuanying1012
  • 2017-12-04 23:54:38
  • 200

Java 为什么没有操作符重载

最近一直在看Herb 的 Exceptional C++ 系列书籍 ,Scott Meyer 在书的序中写到,Exceptional C++是一本常常会"make me surprise" 的书,的确...
  • rogeryi
  • rogeryi
  • 2006-12-07 10:40:00
  • 6456

c语言如何实现函数重载

c语言如何实现函数重载
  • susidian
  • susidian
  • 2017-04-09 22:58:49
  • 2061
收藏助手
不良信息举报
您举报文章:为什么C语言不支持重载,C++支持重载???
举报原因:
原因补充:

(最多只允许输入30个字)