extern “C”的作用
来源:互联网 发布:中国与全世界为敌 知乎 编辑:程序博客网 时间:2024/04/29 18:17
C compiler和C++ compiler将.c/.cpp编译成.obj时候给一个方法命名时候所采
用的方案是不同的,C compiler比较简单,加一个下滑线"_",比如
foo() => _foo。
而C++由于有了function overload以及namespace等机制,稍微复杂了一些。比如
foo() =可能=> _@@@foo@_$$
当混合使用C和C++进行变成的时候,会出现一些问题,比如我现在有一个
a.obj,它是用C写的,里面有一个foo(),因此a.obj中它是_foo。
而现在我把这个.obj用于我的一个C++工程:
//b.cpp
void foo()
int main() {
foo();
return 0;
}
当我用C++ compiler编译b.cpp的时候,foo这个方法会变成_@@@foo@_$$
然后存入obj中,接着我link a.obj和b.obj,linker会从两个obj中
查找关于_@@@foo@_$$的定义,并且将他们连结起来,但是它找不到_@@@foo@_$$
的定义了,因为只有_foo的定义在a.obj中。
因此,要解决这个问题,必须要保持两个obj文件中foo的一致性,extern "C"就是
解法,上面的程序改为:
extern "C" void foo()
int main() {
foo();
return 0;
}
则,C++编译器就会采用C的命名方式,_@@@foo@_$$不会出现在b.obj中,而变成_foo。
- extern "C" 的作用
- extern “C”的作用
- extern "C"的作用
- extern C 的作用
- extern "C"的作用
- extern c的作用
- extern c的作用
- extern "C" 的作用
- extern "c"的作用
- extern "C"的作用
- extern "C"的作用
- extern C的作用
- extern "C" 的作用
- extern c的作用
- extern "C"的作用
- extern "C"的作用
- extern "C"的作用
- extern “C” 的作用
- (转)map插入自定义对象小结
- 修改数据访问代码
- 整数溢出(Integer Overflows)
- PC/TCP Packet Driver Specification
- SQL Server建立应用程序角色与标准角色
- extern “C”的作用
- 压力
- oracleJdbc连接
- SQL字符串处理函数大全
- iptables设置
- 09.4.15 C++ primer
- 常用波特率与其它参数选取关系
- 鼠标拖动控件
- MFC中使主界面右上角按钮失效