已解决
C++和 C 混合编程处理
来自网友在路上 153853提问 提问时间:2023-11-03 03:00:45阅读次数: 53
最佳答案 问答题库538位专家为你答疑解惑
原因是因为有很多功能是用 C 语言开发的,而 C++是兼容 C 的,C++应该能直接使用这些功能,那么我们把 C++调用 C 实现的功能的这个做法,称为混合编程
但是用 C 开发的功能,很可能已经用 C 编译器编程成目标文件(或打包成库了),那么目标文件中的函数名已经确定下来了,C++去调用函数时,会进行换名处理,将导致,在目标文件中找不到对应的函数
为什么 C++会去改变函数名呢,因为 c++支持函数重载,只要参数不同,返回值不同函数名可以相同,因为 c++会将函数的名字根据返回值以及参数重新生成一个名字,验证的话可以使用-c 编译一个.o 文件,然后用 nm 命令去查看里面的内容,例如:

那么怎么解决 c++会对 c 函数进行换名处理而找不到定义呢?
在 C++中提供了一个关键字:extern "C",称为链接指示,即告诉 C++编译器,用 extern "C" 修饰的函数,是用 C 编译器编译的,当调用这个函数的时候,不要去修改它们的名字,大多数情况下,extern "C" 是写在头文件中的。但是因为 C 语言不认识这个关键字,所以在编译代码时,我们得区分编译器是 C 的编译器,还是 C++的编译器,C++编译器中预定义了一个宏,叫:_cplusplus,C 编译器没有定义这个宏,所以,我们可以根据这个宏来区分是哪个编译器在编译代码,例如:
#ifdef _cplusplus
extern "C"
{
#endifint sum(int a, int b);double fun();
#ifdef _cplusplus
}
#endif
可以看到,如果是 C++编译器,那么就会调用 extern “C”对函数进行兼容处理。
查看全文
99%的人还看了
相似问题
- 编译器安全
- Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefilemake详解
- AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新)
- 基于Google Colaboratory安装Go语言编译器操作流程
- AI 引擎系列 4 - 首次运行 AI 引擎编译器和 x86simulator(2022.1 更新)
- [C++ 中]:6.类和对象下(static成员 + explicit +友元函数 + 内部类 + 编译器优化)
- 【Linux系统学习】系统编程开发工具编译器gcc/g++使用
- 详解三大编译器: gcc、llvm 和 clang (icc/icpc/ifort)
- 【C/C++】使用 g++ 编译器编译 C++ 程序的完全指南
- Linux开发工具之文本编译器vim
猜你感兴趣
版权申明
本文"C++和 C 混合编程处理":http://eshow365.cn/6-30746-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!