|
概述
随着汽车智能化、电动化和网联化的发展,车上的电子系统愈发繁多和复杂,软件开发所用的语言也逐渐发生变迁,从开始的汇编语言,到C语言,再到C++语言。目前开发的项目所使用的编程语言还是以C语言为主,但是C++语言的占比在逐渐增大。特别是在ADAS领域,应用层算法使用C++语言逐渐增多,然而AUTOSAR的底层软件和中间件,又是基于C语言开发的。因此经常会面临C和C++混合编程,以及相互调用的问题。
本文主要讲述,基于TASKING的C和C++混合编程和相互调用的实现方式。
C和C++编程语言支持
TASKING支持C和C++两种编程语言。在使用C或者C++语言进行项目开发时,首先面临的问题就是创建C代码的工程或者C++代码的工程。在创建工程的时候,选择空白工程(如图 1)。

图 1工程类型选择
当这个空白工程添加C语言代码,即C语言代码的工程,默认状态下“C/C++ CompilerLanguage”选项中(见图 2),关于C语言的选型都是亮色,可以进行选择;C++语言选项是灰色,不能进行选择。当向工程中添加C++代码时,工程中的C++语言选项自动变成亮色,可以进行选择。这个工程也就变成了C++的工程。其中C语言提供了三个标准:ISO C90、ISO C99和ISO C11(2011版本)三个版本;C++语言提供了三个标准:ISO C++03、ISO C++11和ISO C++14。工程师可以根据实际的需求来选择,没有特别需求,建议选择最新版本。其他的各个选项涵义可以参考user guide中第10章《Tool Options》中的描述,根据实际需求进行选择。

图 2语言选项设置
如果工程中添加了C和C++两种代码,但这两种语言的代码没有进行相互调用,其实不用特别处理。如果存在相互调用的情况,就需要面对C和C++混合编程的问题。接下来的章节,我们探讨混合编程的实现。
C和C++混合编程实现
C和C++的关系概述
C和C++是两种编程语言,语言的特性各有不同。简单来讲有两点:1)C++是基于C语言发展而来,继承了C语言的特性。2)C++提供了更多的语法和特性,如函数加强、类的概念和模板等等,具有C语言所不具备的内容和特性。这两种编程语言的代码进行相互调用的时候,需要做一些处理,否则会报错。
C++代码调用C代码
C++的代码中调用C语言的代码。首先需要在C++代码中需要使用extern “C” 对代码进行声明,调用的是C语言的函数、变量或者包含的头文件。
例如:名称为File_1.c这个C代码文件中,有一个函数func1.需要在C++文件File_B.cpp中调用。首先在File_2.cpp使用extern “C”声明func1是C语言的函数,然后再进行调用。
-------------------------
void func1 (void)
{
// function code
}
-------------------------
extern “C”
{
#include “clib.h”
func1();
}
或者采用另外一种方式。将代码 和变量的声明都放在对应的头文件中,然后再C++的代码中声明整个头文件的包含,这样头文件中所有的内容,函数声明和变量声明,都显示在extern “C” 的声明当中。
// file_2.cpp
extern “C”
{
#include “File_1.h”
}
Void func2(void)
{
func1();
}
C代码调用C++代码
C++语言的特性,在C语言中并不具备。所以不能直接调用C++的函数,需要通过包装处理一下,如下所示。首先使用extern “C” 声明函数func_1是C代码,然后在func_1中调用C++的函数。C代码中的函数func_2调用函数func_1,通过func_1间接调用C++的函数。为了保证编译和运行的稳定,func_1不要有输入和输出的参数。
file_1.cpp中
-------------------------
extern "C" void func_1(void)
{
Func1_cpp();// function code
Func2_cpp();// function code
}
-------------------------
file_2.c
-------------------------
void func_1(void);
void func_2(void)
{
func_1();
}
------------------------
总结
至此,本文简单介绍了如何利用TASKING软件,创建C代码工程、C++代码工程和如何进行C语言,以及C++语言的混合编程。欢迎广大工程师进行交流。
<hr/>联系我们
如有技术问题,请联系TASKING在国内的技术支持。
邮箱:support.china@tasking.com
官方网站:http://www.tasking.com
试用申请:https://www.tasking.com/trial
请关注官方订阅号,及时获取最新的TASKING信息资讯和技术文档。 |
|