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
#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
相关文章推荐
- extern "C"的使用
- extern使用方法总结!
- 总结C++中三种关于"new"的使用方法
- extern使用方法总结!
- c++总结(1)-变量作用域及extern使用以及头文件预编
- extern使用方法总结
- extern "C"使用
- extern使用方法总结
- ASP.NET的gridview设置数据格式(DataFormatString="{}")与 String.Format 使用总结收藏
- 总结:form中使用onSubmit="return false"防止表单自动提交,以及s...
- extern "C" 的解释和使用方法
- ASP.NET的gridview设置数据格式(DataFormatString="{}")与 String.Format 使用总结 .
- c调用c++和c++调用c时所使用的extern "c"的区别
- 总结C++中三种关于"new"的使用方法
- Extern使用方法总结
- extern "c"使用
- extern使用方法总结!
- C/C++语言extern使用方法总结.doc
- ASP.NET的gridview设置数据格式(DataFormatString="{}")与 String.Format 使用总结
- extern "C"的使用