为什么我们需要在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
它们的代码。
- 3 回答
- 0 关注
- 1641 浏览
添加回答
举报
0/150
提交
取消