C语言中为什么不支持函数重载,C++支持

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

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

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

.C语言中为什么不能支持函数重载?

从上图可知编译器在编译.c文件时只会给函数进行简单的重命名;具体的方法是给函数名之前加上”_”;所以加入两个函数名相同的函数在编译之后的函数名也照样相同;调用者会因为不知道到底调用那个而出错;

2.C++中函数重载底层是如何处理的?

  •  在.cpp文件中,虽然两个函数的函数名一样,但是他们在符号表中生成的名称不一样。
  • ‘?’表示名称开始,‘?’后边是函数名“@@YA”表示参数表开始,后边的3个字符分别表示返回值类型,两个参数类型。“@Z”表示名称结束。 
  • 由于在.cpp文件中,两个函数生成的符号表中的名称不一样,所以是可以编译通过的。

3.C++中能否将一个函数按照C的风格来编译?

#include<iostream>
#include<Windows.h>
using namespace std;
 
 
extern "C" int Add(int a, int b)
{
 
	return a + b;
}
int main()
{
	cout << Add(10, 20) << endl;
	system("pause");
	return 0;
}

可以按照C风格来编译,只需在函数名前加extern "C" 就可以完成按照C风格来编译

猜你喜欢

转载自blog.csdn.net/ijn842/article/details/81280726