欢迎来到我司Viking代理产品网站!
C语言和C ++相互调用
Viking代理 2025-05-01

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