为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们需要在C ++中使用extern“C”{#include <foo.h>}?

为什么我们需要在C ++中使用extern“C”{#include <foo.h>}?

C++ C
慕容3067478 2019-08-26 10:03:47
为什么我们需要在C ++中使用extern“C”{#include <foo.h>}?为什么我们需要使用:extern "C" {#include <foo.h>}特别:我们什么时候应该使用它?在编译器/链接器级别发生了什么,需要我们使用它?如何在编译/链接方面解决了需要我们使用它的问题?
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

C和C ++在表面上相似,但每个编译成一组非常不同的代码。当您使用C ++编译器包含头文件时,编译器需要C ++代码。但是,如果它是一个C头,则编译器需要将头文件中包含的数据编译为某种格式--C ++'ABI'或'应用程序二进制接口',因此链接器会扼杀。这比将C ++数据传递给期望C数据的函数更可取。

(为了深入了解真正的细节,C ++的ABI通常会“破坏”它们的函数/方法的名称,所以在printf()不将原型标记为C函数的情况下进行调用_Zprintf,C ++实际上会生成代码调用,最后加上额外的废话。 )

所以:extern "C" {...}当包括ac头时使用- 就这么简单。否则,您将在编译的代码中出现不匹配,并且链接器将会阻塞。但是,对于大多数标头,您甚至不需要它,extern因为大多数系统C标头已经考虑到它们可能包含在C ++代码中并且已经包含extern它们的代码。


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 1577 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信