主要内容

C++ 代码生成

MATLAB® Coder™ 使您能够生成 C 或 C++ 代码。默认情况下,代码生成器生成 C 代码。生成的 C++ 代码可以使用 C 语言中没有的功能,这些功能可以使 C++ 代码更加易读和易于使用。

生成 C++ 代码

要生成 C++ 代码,请遵循代码生成工作流。请参阅使用 MATLAB Coder 进行代码生成的概述

使用以下方法之一指示代码生成器生成 C++ 代码:

  • 在命令行中将 -lang:c++ 选项与 codegen 命令一起使用。

  • 在代码配置对象中将 TargetLang 属性设置为 "C++"

  • 在代码生成设置中,将语言参数设置为 C++

  • MATLAB Coder 中,点击 MATLAB Coder 工具条中的语言按钮,然后选择 C++

生成的代码中支持的 C++ 语言功能

下表描述一些代码配置参数,您可以使用它们来控制生成的 C++ 代码的外观和行为。

目的配置参数更多信息

为您的 MATLAB 代码中的类生成 C++ 类。

从 MATLAB 类生成 C++ 类

Generate C++ Code for MATLAB Classes

将入口函数生成为 C++ 类中的方法。

接口样式

Generate Class Interface in C++ Code

为 MATLAB 命名空间生成 C++ 命名空间。将所有生成的代码放在指定的 C++ 命名空间中。

从 MATLAB 命名空间生成 C++ 命名空间

Organize Generated C++ Code into Namespaces

使用 C++ coder::array 模板实现动态分配的数组。生成的代码提供简单的 API,您可以使用它与该模板进行交互。

动态内存分配接口

Use Dynamically Allocated C++ Arrays in Generated Function Interfaces

生成的 C 代码和 C++ 代码之间的其他区别

如果为同一个 MATLAB 函数分别生成 C 和 C++ 代码,并检查生成的源代码,可以发现在实现上的差异。这些是一些显著的差异:

  • 生成的 C++ 代码可包含具有多个签名的同名重载函数或方法。C 语言不支持函数重载。

  • 生成的 C++ 代码可跨不同命名空间层次结构重用相同的标识符名称。例如,相同的类型名称 myType 可以出现在两个不同命名空间层次结构中,顶层命名空间为 myNamespace_1myNamespace_2。C 语言不支持命名空间和这种标识符名称重用。

  • 在生成的 C 代码中,函数头包含为生成的 C 函数指定 extern "C" 标识符的 #ifdef __cplusplus include 防卫式声明。编译器和链接器在构建作为 C++ 工程一部分的 C 代码时使用这些标识符。

  • 生成的 C++ 代码的 C++ 文件使用 .cpp 文件扩展名,头文件使用 .h 文件扩展名。生成的 C 代码使用 .c.h 扩展。

  • 生成的 C++ 代码使用一些 C++ 强制转换,例如 static_cast,比 C 语言中的强制转换语法更加显式。

  • 生成的代码基于 C++ 和 C 的不同机制为 InfNaN 定义值。

  • 生成的 C++ 代码使用将 MATLAB 类型映射到生成的代码中的类型中所述的自定义数据类型。

  • 生成的 C++ 代码使用与生成的 C 代码不同的库。例如,更改用于代码生成的语言标准中描述了 C++ 和 C 的默认语言标准。

另请参阅

主题