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

来源:互联网 发布:营业部买卖数据 编辑:程序博客网 时间:2024/04/30 15:43
C++、C编译器对函数编译的相关知识:    C++支持函数重载,而C不支持,两者的编译规则也不一样。函数被C++编译后在符号    库中的名字与C语言的不同。    例如,假设某个函数的原型为: void foo( int x, int y ); 该函数被C编译器编译后    在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字。

【知识点】

#ifdef__cplusplus 是什么意思?时常在cpp的代码之中看到这样的代码:#ifdef__cplusplusextern"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"{#endif    void show1();    void show2();#ifdef __cplusplus};#endif#endif---------------------------------------------------------------------//define_show1.cpp#include "head.h"void show1(){#ifdef __cplusplus    cout<<"show1:这是一个c++程序"<<endl;#else    printf("show1:这是一个C程序\n");#endif}---------------------------------------------------------------------//define_show2.c#include "head.h"void show2(){#ifdef __cplusplus    cout<<"show1:这是一个c++程序"<<endl;#else    printf("show2:这是一个C程序\n");#endif}---------------------------------------------------------------------//main.c或者main.cpp(二者运行结果一样)#include "head.h"int main(){    show1();    show2();    getchar();}【输出结果如下图所示】

这里写图片描述

分析输出结果:    输出结果由 实现show1()函数和实现show2()函数是在.c还是在.cpp 所决定!
0 0
原创粉丝点击