您的位置:首页 > 编程语言 > C语言/C++

extern "C"使用总结

2017-11-26 13:33 267 查看
在C++源代码中,我们经常会看到下面的代码:

#ifdef _cplusplus

extern “C” {

#endif

/* ….. */

#ifdef _cplusplus

#endif

那么它的作用是什么呢,其实extern "C"是C中的一种声明,它是告诉编译器将这部分代码按照C语言的形式进行编译和链接,我们都知道,

C和C编译器对函数和变量的处理是完全不同的,因此,为了使得C语言和C语言能互相调用,我们必须要约定它们之间的形式统一,以使得

C和C语言能互相之间能互相调用,这也就是extern "C"的作用。如果不存在两者之间的互相调用,则不需使用extern "C"进行声明。

下面举例来说明:

(1)C语言中调用C的函数或变量

TestCpp.cpp



TestC.c中调用上面cpp中全局变量和函数add



这个时候我们运行程序的时候会提示找不到符号



这是因为C方式编译的符号和C使用的符号不统一,导致C链接时找不到该符号,如果这是使用extern “C” 修饰C变量和函数,则C编译

时会使用C语言的方式,这是C语言链接时则能正确找到符号,TestCpp.cpp改成下面的形式:



这时候C语言能正常链接起来。

在我们实际的项目中,我们会涉及到很多这样的需要被C调用的函数和变量,这时我们统一把这些使用extern “C” {}声明,这里添加一个Test.h文件

TestCpp.cpp



TestC.c



Test.h



(2)在C中调用C语言

这里我们只把两个源文件内容对换,头文件因为有预编译宏cplpusplus我们不需要做任何改变

TestCpp.cpp



TestC.c



总之,extern "C"是在C中使用的一种声明,它的作用就是编译工具安装C语言的方式去进行编译和链接,以达到C与C之间互调的目的。
原文链接:http://www.uptoday.net/articles/2017/11/26/1511671557549.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 C++ extern C