C++和C混合编程的方法是什么

发布时间:2021-11-24 10:31:14 作者:iii
来源:亿速云 阅读:121

这篇文章主要介绍“C++和C混合编程的方法是什么”,在日常操作中,相信很多人在C++和C混合编程的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++和C混合编程的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

最近经常看到头文件中有

#ifdef __cplusplusextern "C" {#endif.......



#ifdef __cplusplus
}#endif

1.这种写法的由来

C++比C晚出现,C++代码如果能够调用C语言的代码,那么会更好的利用现有的成果,但是事实上C++代码是无法直接调用C代码的,这是因为C++编译器在编译.cpp文件时生成的函数名与C编译器在编译.c文件时生成的函数名是不一样的。

C++为了支持重载,其编译器在编译完成后会对原有的函数名进行修改,比如

test(int i)和

test(int i, int j)

这两个函数在编译完成后可能就会被C++编译器修改成:

_ZDtesti

_ZDtestii

这种样式

但是C编译器却不会修改函数名,这样问题就就来了,如果在一个C++代码中包含一个声明C函数的头文件时,那么很可能在编译完成后,头文件中声明的这个C函数名会被修改!这样在C++代码中使用这个C函数的时候就会发生找不到函数名的问题,事实上这个函数在C代码中是存在的,只不过C++编译器一厢情愿的把函数名修改了。那么如何解决呢?

2.解决办法

很简单,显式的告诉C++编译器,这段代码是用C语言编译的函数,你就不要把函数名转化为C++的格式了。

extern "C" {int socket_send(); // 明确的告诉C++编译器,这是一个用C语言编译的函数    }

这样C++编译器在执行这段代码时,识别到extern "C"关键字,就会以C编译器的方式来编译括号内的代码。

3.由此引发的问题

这样虽然在C++编译下没有问题了,但是如果一个.c文件再去包含这个头文件时,又会发生问题,因为extern "C"不是C语言的关键字,这样.c文件又不能包含这个头文件了。如何能够既让.cpp文件能够包含这个头文件,又能让.c文件能够包含这个头文件呢,于是下面的写法就产生了:

使用条件编译的方式,如果判断是C++的编译器,就带上extern "C",如果是C的编译器就不带extern "C",由此,问题得到妥善解决。需要注意的是:__cplusplus是C++编译器内置的宏。

到此,关于“C++和C混合编程的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. python+C、C++混合编程的应用
  2. C/C++混合编程之extern “C”的使用示例

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ c

上一篇:C++临时对象的生命周期怎么实现

下一篇:Java面向未来的新特性有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》