| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> C++知识库 -> extern “C“有什么用 -> 正文阅读 |
|
|
[C++知识库]extern “C“有什么用 |
|
?extern “C”作用是在c++中extern “C”修饰的符号都以c语言的方式编译。 1.c 语言和c++编译函数的区别。? ? 先写一个简单的代码测试如下: sum.h
sum.c
makefile
? ? 代码使用了g++和gcc来编译了sum.c得到了两个目标文件分别是sum_c.o 和sum_cpp.o。然后我们使用nm来查看这两个目标文件的符号,可以很清晰地看到c语言编译后得到的sum函数的符号就是函数的名字,而c++编译得到的符号是一个前缀+函数名字+参数的缩写(参数重载)。
2.c 和c++相互调用的问题? ? 按照上面的描述c和c++相互调用时必然会出错,因为同样的一个函数会被编译成两个符号。链接的过程肯定会找不到彼此。继续测试如下: main.cpp
makefile
? ? 代码使用sum_c.o和mian.o编译链接得到可执行文件a_c.out。链接的时候报错了。
3.extern "C" 的作用? ? 前面说过了extern "C"的作用就是将c++的代码按照c的方式编译,在上面的例子中主函数main是c++的,我们就需要在main.cpp中使用extern "C"修饰sum函数,让他在main.o的符号也是sum。修改代码如下: main.cpp
这个时候再使用g++ sum_c.o main.cpp -o a_c.out来编译就不会失败了。再看一次符号,两者是一致的。
?同理,如果我们把文件名字改成main.c 和 sum.cpp,那么我们就需要在sum.cpp中间来加extern "C"了。 |
|
|
| C++知识库 最新文章 |
| 【C++】友元、嵌套类、异常、RTTI、类型转换 |
| 通讯录的思路与实现(C语言) |
| C++PrimerPlus 第七章 函数-C++的编程模块( |
| Problem C: 算法9-9~9-12:平衡二叉树的基本 |
| MSVC C++ UTF-8编程 |
| C++进阶 多态原理 |
| 简单string类c++实现 |
| 我的年度总结 |
| 【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
| c语言常见错误合集 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/27 22:35:02- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |