Main Content

代码生成的数据定义注意事项

要生成高效的独立代码,您必须定义以下不同于在 MATLAB® 中运行代码时的数据类型和类。

数据类型注意事项更多信息
数组

元素的最大数量受限。

Array Size Restrictions for Code Generation
数值类型

在运算中使用数值类型变量或将它们作为输出返回之前,要先对它们赋值。

为 C/C++ 代码生成定义变量的最佳做法 (MATLAB Coder)
复数
  • 要在赋值和第一次使用之前设置变量的复/实性。

  • 包含复数或变量的表达式的计算结果为复数,即使结果的虚部为零也是如此。

复数数据的代码生成
字符和字符串
  • 字符精度限于 8 位。

  • 对于代码生成,字符串标量不支持全局变量、花括号索引、缺失值或使用函数 coder.varsize 更改大小。

可变大小数据

在对变量进行初始固定大小赋值后,尝试增大变量可能导致编译错误。

结构体
  • 在每个控制路径中均须以相同的顺序将字段分配给结构体。

  • 对结构体数组元素中的对应字段须指定相同的大小、类型和复/实性

元胞数组
  • 在将元胞数组传递给函数或从函数返回之前,须为所有元胞数组元素赋值。

  • 可变大小的元胞数组元素必须具有相同的大小、类型和复/实性。

  • 基于输入数组创建表时,必须使用 'VariableNames' 名称-值参数指定变量名称。

  • 使用表函数和 'Size' 名称-值参数预分配表时,数据类型支持存在一定限制。

  • 指定变量的表索引必须为编译时常量。

  • 您无法通过赋值来更改表的大小。

  • 创建表后,无法更改表的 VariableNamesRowNamesDimensionNamesUserData 属性。

适用于类的限制也适用于表。

分类数组

分类数组不支持以下输入和操作:

  • MATLAB 对象数组

  • 稀疏矩阵

  • 重复的类别名称

  • 通过赋值实现增长

  • 添加类别

  • 删除元素

适用于类的限制也适用于分类数组。

日期时间数组

datetime 数组不支持以下输入和操作:

  • 文本输入

  • 'Format' 名称-值参数

  • 'TimeZone' 名称-值参数和 'TimeZone' 属性

  • 设置时间分量属性

  • 通过赋值实现增长

  • 删除元素

适用于类的限制也适用于 datetime 数组。

持续时间数组

持续时间数组不支持以下输入和操作:

  • 文本输入

  • 通过赋值实现增长

  • 删除元素

  • 使用 charcellstrstring 函数将持续时间值转换为文本

适用于类的限制也适用于持续时间数组。

时间表

  • 基于输入数组创建时间表时,必须使用 'VariableNames' 名称-值参数指定变量名称。

  • 使用时间表函数和 'Size' 名称-值参数预分配表时,数据类型支持存在一定限制。

  • 指定变量的时间表索引必须为编译时常量。

  • 您无法通过赋值来更改时间表的大小。

  • 创建时间表后,无法更改其 VariableNamesDimensionNamesUserData 属性。

  • 如果您创建规则时间表,并尝试设置不规则的行时间,则会生成错误。

  • 如果您创建不规则时间表,则即使您设置其采样率或时间步,它仍是不规则的。

适用于类的限制也适用于时间表。

枚举数据:

仅支持基于整数的枚举类型。

枚举
MATLAB 类

  • 在生成代码之前,最好通过在整个输入值范围内运行 MEX 函数来测试类属性验证。

  • 如果属性没有显式初始值,代码生成器将假定它未在构造函数的起始部分进行定义。代码生成器不会指定空矩阵作为默认值。

  • 类属性不支持 coder.varsize 函数。

  • 如果一个属性的初始值是对象,则该属性必须是常量。要使属性为常量,可在属性模块中声明常量特性。

函数句柄
  • 将不同函数句柄赋给同一变量会导致编译时错误。

  • 无法向入口函数或外部函数传递函数句柄,也无法从入口函数或外部函数传递函数句柄。

  • 无法从 MATLAB Function 模块调试器中查看函数句柄。

函数句柄
深度学习数组

dlarrays 不支持以下输入和操作:

  • 数据格式参数必须为编译时常量

  • 在入口函数中定义 dlarray 变量。

  • dlarray 的输入必须为固定大小。

  • 代码生成不支持使用指定了上界大小和可变维度的 coder.typeof 函数创建 dlarray 类型对象。

上表并未详尽列出每种数据类型注意事项。请参阅“详细信息”列中的主题。

相关主题