1 C ++和C ++相互调用。
在嵌入式系统中,大多数底层和驱动程序层都是使用C语言开发的,而上层应用程序和服务则是使用诸如面向对象开发的C ++之类的高级语言开发的。
方式上,存在上层调用底层接口的问题,例如,最常用的C ++调用C接口以完成相应的外围设备驱动程序接口。
我们知道C ++几乎与C完全兼容。
不同的编译语言都有自己的一套编译规则。
当然,C语言和C ++的编译规则是不同的,但是C ++编译器等效于与C语言兼容,以便与C语言兼容。
编译方法,而C语言编译器通常与C ++编译方法不兼容。
因此,从理论上讲,使用C编译器编译的模块可以直接通过C ++调用。
2extern关键字因为默认情况下C ++编译器根据C ++编译方法编译源文件,所以C语言文件也将直接在C ++中编译。
对于底层驱动程序等,它将以用C语言编写的DLL给出,然后将其从函数导出到C或C ++模块以进行访问,因此仍然需要以C ++语法将其标识给编译器,这需要要使用C ++进行编译,则需要使用C进行编译。
然后,通过外部“ C”完成此编译区别,下面以一个示例来看一下如何使用它。
//FileName:main.c#include#include#include“Cal.h”intmain(intargc,char**argv){printf("Cal(int):%d“,Cal(5)); printf(” ; Cal(float):%。
5f“,Cal(1.1f)); return0;} // FileName:Cal.c#include” Cal.h“ intCal(intVal){returnVal * Val;} floatCal(floatVal){ returnVal * Val;} //文件名:Cal.h#ifndef__CAL_H __#define__CAL_H __ // extern“ C” // {intCal(intVal); floatCal(floatVal); //}#endif注释部分指示校准。
该c文件将用C编译。
由于C ++支持函数重载并且C语言不支持函数重载,所以上述源代码可以直接被编译和传递,并且一旦外部“ C”被返回,则该源代码可以被编译。
注释被删除,编译将失败。
3互调操作上面的兄弟绘制了互调的示意图,并分别进行了解释:1)C ++编译器可以通过extern“ C”直接调用用C编译的库文件,并最终与其他文件一起编译。
成为可执行文件。
2)C ++编译器首先在外部“ C”中编译模块。
模式,C编译器直接获取模块文件,并将其与其他文件一起编译以生成可执行文件。
4技巧:__cplusplus的宏定义通常内置在C ++编译器中。
然后,我们可以使用此宏设置预编译的结构。
在C ++编译器中时,请使用extern“ C”。
来编译C模块代码,否则只需删除它,相信您会在某些库文件中经常看到它。
#ifdef__cplusplusextern“ C” {#endif // fuctiondefinitionordeclaration#ifdef__cplusplus} #endif