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++ 类。 | |
将入口函数生成为 C++ 类中的方法。 | |
为 MATLAB 包生成 C++ 命名空间。将所有生成的代码放在指定的命名空间中。将为 MathWorks® 代码生成的所有代码放在您指定的命名空间中。 | |
在自定义 C++ 代码和生成的代码之间传递动态分配的数组。生成的 C++ 代码通过使用 | Use Dynamically Allocated C++ Arrays in Generated Function Interfaces |
这些示例说明这些功能的使用:
生成的 C 代码和 C++ 代码之间的其他区别
如果为同一个 MATLAB 函数分别生成 C 和 C++ 代码,并检查生成的源代码,可以发现在实现上的差异。这些是一些显著的差异:
生成的 C++ 代码可包含具有多个签名的同名重载函数或方法。C 语言不支持函数重载。
生成的 C++ 代码可跨不同命名空间层次结构重用相同的标识符名称。例如,相同的类型名称
myType
可以出现在两个不同命名空间层次结构中,顶层命名空间为myNamespace_1
和myNamespace_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 的不同机制为
Inf
和NaN
定义值。生成的 C++ 代码使用Mapping MATLAB Types to Types in Generated Code中所述的自定义数据类型。
生成的 C++ 代码使用与生成的 C 代码不同的库。例如,Change Language Standard Used for Code Generation中描述了 C++ 和 C 的默认语言标准。