C语言为什么不支持重载,而C++支持
2010-08-06 15:29
381 查看
如果 C++程序要调用已经被编译后的 C 函数,该怎么办?
假设某个 C 函数的声明如下:
void foo(int x, int y);
该函数被 C 编译器编译后在库中的名字为_foo,而 C++编译器则会产生像_foo_int_int
之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能
直接调用 C 函数。C++提供了一个 C 连接交换指定符号 extern“C”来解决这个问题。
例如:
extern “C”
{
void foo(int x, int y);
... // 其它函数
}
或者写成
extern “C”
{
#include “myheader.h”
... // 其它 C 头文件
}
这就告诉 C++编译译器,函数 foo 是个 C 连接,应该到库中找名字_foo 而不是找
_foo_int_int。C++编译器开发商已经对 C 标准库的头文件作了 extern “C”处理,所以
我们可以用#include 直接引用这些头文件。
假设某个 C 函数的声明如下:
void foo(int x, int y);
该函数被 C 编译器编译后在库中的名字为_foo,而 C++编译器则会产生像_foo_int_int
之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能
直接调用 C 函数。C++提供了一个 C 连接交换指定符号 extern“C”来解决这个问题。
例如:
extern “C”
{
void foo(int x, int y);
... // 其它函数
}
或者写成
extern “C”
{
#include “myheader.h”
... // 其它 C 头文件
}
这就告诉 C++编译译器,函数 foo 是个 C 连接,应该到库中找名字_foo 而不是找
_foo_int_int。C++编译器开发商已经对 C 标准库的头文件作了 extern “C”处理,所以
我们可以用#include 直接引用这些头文件。
相关文章推荐
- 为什么C++支持重载,C语言不支持
- 为什么c++支持重载而C语言不支持重载
- 为什么c++支持重载而c不支持?
- 【C++】模板简述(四):模板为什么不支持分离编译?
- C++为什么可以进行函数重载以及引起的二义性问题
- 从内存上解析c++中数组为什么不支持多态
- 为什么C++没有内建支持多线程
- 汇编告诉你为什么c++可以对函数重载
- 为什么在C++中对赋值号“=”的重载只能使用成员函数而不可以使用友元函数?求高手、大神帮我解答!
- 为什么C++支持函数重载
- 为什么Windows Phone 7不支持C++?
- C++ 中为什么模板不支持分离编译?
- C++为什么要同时支持指针和引用
- 【c++面试题】c++中函数的重载,c++程序中调用C编译器编译后的函数为什么要加extern "C 4000 "
- 为什么c++中重载流操作符要用友元函数
- c++:为什么模板不支持分离编译?
- 为什么Windows Phone 7不支持C++?
- C#为什么不能像C/C++一样的支持函数只读传参
- C++语言笔试题目 C++中为什么用模板类&& 类中如何使用const &&函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以
- c++中为什么有不能重载的运算符(摘录)