Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

C++ 代码生成

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

生成 C++ 代码

要生成 C++ 代码,请遵循与生成 C 代码相同的整体工作流步骤。例如,请参阅通过命令行生成 C 代码。从命令行中或使用代码生成配置设置或者从 MATLAB Coder 中选择 C++ 语言选项。

假设您要为接受零输入的函数 foo 生成 C++ 代码:

  • 从命令行中,使用 -lang:c++ 设定符。此设定符提供一种快速简单的生成 C++ 代码的方法。例如,要为 foo 生成 C++ 静态库和 C++ 源代码,请输入:

    codegen -config:lib -lang:c++ foo
    
  • 在配置对象中,将 TargetLang 参数设置为 C++。例如,要生成 C++ 动态库,请输入:

    cfg = coder.config('dll');
    cfg.TargetLang = 'C++'; 
    codegen -config cfg foo 
    
  • 在 App 的生成代码步骤中,选择 C++ 语言按钮。

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

要了解利用重要的 C++ 语言功能的代码生成,请参考以下帮助主题:

目标更多信息

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

Generate C++ Classes for MATLAB Classes

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

Generate C++ Code with a Class Interface

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

Organize Generated C++ Code into Namespaces

在自定义 C++ 代码和生成的代码之间传递动态分配的数组。生成的 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++ 代码使用Mapping MATLAB Types to Types in Generated Code中所述的自定义数据类型。

  • 生成的 C++ 代码使用与生成的 C 代码不同的库。例如,Change Language Standard Used for Code Generation中描述了 C++ 和 C 的默认语言标准。

另请参阅

相关主题