欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })

发布时间:2025/3/21 c/c++ 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ }) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
C++、C编译器对函数编译的相关知识:C++支持函数重载,而C不支持,两者的编译规则也不一样。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为: void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字。

【知识点】

#ifdef__cplusplus 是什么意思?时常在cpp的代码之中看到这样的代码: #ifdef__cplusplus extern"C" { #endif//众多函数的声明,形如void show1(); void show2();等#ifdef__cplusplus } #endif【疑问1】为什么要引入#ifdef__cplusplus...extern"C"...语法?因为在.h头文件声明的函数,不知道这些函数是在.c文件中实现还是在.cpp文件中进行实现。如果不用上面的语法,最后在main.c文件中或者main.cpp文件中使用上面已经实现的函数的时候,会由于C和C++编译器的不同,导致找不到函数引起“编译失败”。所以,才引入了上面的语法,该语法带来的好处是:在.h头文件声明的函数,无论是在.c文件中实现还是在.cpp文件中实现,最后在main.c文件中或者main.cpp文件中使用上面已经实现的函数的时候,都会编译成功————>这样就实现了C与C++的混合编程。【疑问2】void show1(); void show2();上面两个函数是.c代码?还是.cpp代码?由什么决定?答:由show1()、show2()函数在.c或者.cpp实现决定。(show函数如果在.c中实现,show函数就是.c代码;show函数如果在.cpp中实现,show函数就是.cpp代码)【疑问3】 有疑问2知道了该函数是.c代码还是.cpp代码之后,我们一般怎么使用这个结论呢?以下面程序为例:void show(){#ifdef __cplusplus //如果show是.cpp代码,就调用下面的......#else //如果show不是.cpp代码,就调用下面的......#endif //#ifdef __cplusplus }

====================================================================================================

综合示例

由于不知道在头文件中声明的函数是在.c文件中定义?还是在.cpp文件中定义? -->因此 ①在头文件中引入#ifdef __cplusplus extern "C"{ //所有函数的声明 }语法。 ②在.c文件 \ .cpp文件中可以实现在.h文件中声明的函数。 ③在main.c文件 \ main.cpp文件中可以调用在②中实现的函数,且程序的执行结果一样。 【下面程序的功能介绍】 //在头文件中声明两个函数:show1()和show2(); //show1()在.cpp文件中实现,show2()在.c文件中实现; //在main.c或者main.cpp文件中调用show1()和show2()函数,执行结果一样。---------------------------------------------------------------------//head.h #ifndef _HEAD_H_ #define _HEAD_H_#ifdef __cplusplus #include <iostream> using namespace std; extern "C" { #endifvoid show1();void show2(); #ifdef __cplusplus }; #endif#endif --------------------------------------------------------------------- //define_show1.cpp #include "head.h"void show1() { #ifdef __cpluspluscout<<"show1:这是一个c++程序"<<endl; #elseprintf("show1:这是一个C程序\n"); #endif } --------------------------------------------------------------------- //define_show2.c #include "head.h"void show2() { #ifdef __cpluspluscout<<"show1:这是一个c++程序"<<endl; #elseprintf("show2:这是一个C程序\n"); #endif } --------------------------------------------------------------------- //main.c或者main.cpp(二者运行结果一样) #include "head.h"int main() {show1();show2();getchar(); }【输出结果如下图所示】

分析输出结果:输出结果由 实现show1()函数和实现show2()函数是在.c还是在.cpp 所决定!

总结

以上是生活随笔为你收集整理的第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。