在C++预防中存在函数重载,本质是采用了name mangling技术在编译时期对函数名进行改编、修饰。不同的编译器有不同生成规则。

构成函数重载的规则:

  • 函数名相同
  • 参数的个数、参数类型、参数顺序不同

注意:函数重载与函数的返回值无关。

1
2
3
4
5
6
7
8
9
10
11
12
void display() {

}
void display(int a) {

}
void display(int a, double b) {

}
void display(double a, int b) {

}

默认C语言是不支持函数重载,但是在C++开发过程中经常会调用C语言编写的库。如果直接在C++文件包含C函数头文件进行调用在程序编译过程会报错。

原因是.c与.cpp文件编译器对函数的编译方式不一样,为了解决这个问题就需要C++中的语法- extern “C”。

通常C语言编写的库的头文件为了保证能够被C与C++同时支持调用,写法大致如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef __SUM_H_

#define __SUM_H_

// C语言库

#ifdef __cplusplus
extern "C" { // 表达函{}内部的函数是C语言编译的方式 
#endif // __cplusplus

int sum(int a, int b);

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // !__SUM_H