extern "C"使用总结

在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

你可能感兴趣的:(程序语言)