C&C++混合编程

  • 时间:
  • 浏览:0

#define _1__H_

注:接口函数并能 用到C++中的class,而且并能 所含animal.h.

#include "1.h"}

gcc -o test  middle.o  animal.o test.o -lstdc++

main: test.o animal.o middle.o

4. 上方层cpp文件:middle.cpp

g++ -c animal.cpp

浅蓝色:c文件

}

(1) 在.C文件中所含的直接或间接头文件中何必 有c++关键字,肯能.C文件是c编译器编译的,无法识别C++关键字。

clean:

注:C调用C++还有有一种快递挂号印刷品函数法。

(2) .c文件要想使用cpp中的class,并能 在有一个 多非成员函数中,而你這個非成员函数是在cpp文件中实现的(.c文件不识别class)。

#ifndef _1__H_

void print(char* data)

5. C文件:test.c

共有有一个 多文件:1.h 1.c  main.cpp

#endif

{

animal.o:animal.h



        return 0;

int main(void)

首先,混合编程全是处在同有一个 多文件里写CC++

        print(“hello,world\n”);

测试:

说明:

橙色:上方衔接头文件(与c++无关)

    接着./a.out,又后要 总出 亲戚亲戚亲戚亲戚朋友神奇的hello,world了,C++调用C代码很简单。

gcc –c 1.c

注:middle.h并能 所含在.C文件中,而且middle.h中不到所含所含C++关键字(如class)的animal.h.

[root@localhost aa]#cat 1.c

#include "1.h"

g++ -c middle.cpp

(3) gcc连接时并能 加进去去-lstdc++(使用c++库),肯能默认会使用c动态库,而c库中没办法 c++的而且 函数。

    2.C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int累似 的名字。C++提供了C连接交换指定符号externC”来解决名字匹配问题图片。

[root@localhost aa]#cat main.cpp

[root@localhost aa]#cat 1.h

        printf("%s\n",  data);

#include <stdio.h>

    1. extern "C"的真实目的是实现类CC++的混合编程。extern C”是由C++提供的有一个 多连接交换指定符号,用于告诉C++这段代码是C函数。extern C”上方的函数不使用的C++的名字修饰,而且用C。这是肯能C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不到直接调用C函数。

应该你這個比较简单,而且你太久写了,就直接写代码。

     4.extern对应的关键字是static,被它修饰的全局变量和函数不到在本模块中使用。而且,有一个 多函数或变量只肯能被本模块使用时,其不肯能被extern C”修饰。

 

绿色:并能 用c++编译,要么是cpp文件,要么所含class关键字

{

    3.extern "C"限定的函数或变量是extern类型的;externC/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量后要 在本模块或其它模块中使用。被extern "C"修饰的变量和函数是按照C语言法子编译和连接的。   

3. 上方层cpp头文件:middle.h

g++ main.cpp 1.o

rm -f middle.o animal.o test test.o

extern void print(char* );

middle.o:middle.h

混合编程包括:1C++引用C的头文件;2g++生成的.ogcc生成的.o相链接。

6. Makefile

1. cpp头文件:animal.h

    _cplusplus标示符用来判断多多系统进程 是用c还是c++编译多多系统进程 编译的。当编译c++多多系统进程 时,你這個标示符会被定义,编译c多多系统进程 时,我太久 定义。C++文档的头文件中,上方代码的意思是:肯能是C++文件(*.cpp)后缀,则使用extern C”,在C++项目中应用的非常广泛。

整个上述例子的关系可用图形表示为:

}

extern "C"{

2. cpp文件:animal.cpp