coder.varsize
解决大小不兼容性错误并声明上界
语法
说明
coder.varsize( 指示代码生成器允许变量 varName1,...,varNameN)varName1,...,varNameN 的维度在运行时改变大小。代码生成器尝试确定每个变量的每个维度的上界。大小为 1 的维度,也称为单一维度,保持固定大小。要指示代码生成器允许单一维度改变大小,您必须使用 upperBounds 和 variableSize 参量指定可变大小上界。有关在 MATLAB® 代码中定义可变大小数据以进行代码生成的详细信息,请参阅为代码生成定义可变大小数据。
coder.varsize( 为变量 varName1,...,varNameN,upperBounds)varName1,...,varNameN 的每个维度指定上界。单一维度保持固定大小。
coder.varsize( 为在 varName1,...,varNameN,upperBounds,variableSize)upperBounds 中指定的每个上界指定该上界是固定大小还是可变大小。要指示代码生成器允许单一维度改变大小,请显式指定可变大小上界。
示例
输入参数
限制
代码生成不支持将
coder.varsize与全局变量、MATLAB 类和 MATLAB 类属性结合使用。代码生成不支持将
coder.varsize与字符串结合使用。请参阅解决错误:字符串不支持 coder.varsize (MATLAB Coder)。coder.varsize指令指示代码生成器允许变量的大小发生变化。它不会更改变量的大小。以如下代码片段为例:... x = 7; coder.varsize("x", [1 5]); disp(size(x)); ...
在
coder.varsize指令后,x仍是 1×1 数组。您不能为超出x的当前大小的元素赋值。例如,以下代码会产生运行时错误,因为索引 3 超出了x的维数。... x = 7; coder.varsize("x", [1,5]); x(3) = 1; ...
您无法对函数输入参量调用
coder.varsize。在这种情况下:如果函数是入口函数,请在命令行中使用
coder.typeof(MATLAB Coder) 指定输入参量具有可变大小。或者,通过使用 MATLAB Coder™ 的定义输入类型步骤,指定入口函数输入参量具有可变大小。如果函数不是入口函数,请在主调函数中使用
coder.varsize,变量是被调函数的输入。
对于稀疏矩阵,
coder.varsize将可变大小维度视为无界。要对一个元胞数组使用
coder.varsize,该元胞数组必须为同构元胞数组。请参阅代码生成的元胞数组限制。
提示
在许多情况下,代码生成器能够确定变量的大小可以在运行时改变。在这种情况下,您不需要使用
coder.varsize指令。仅在代码生成器生成大小溢出错误或您要指定上界时才使用coder.varize。要在 MATLAB Function 模块中声明可变大小的输出变量,请使用符号窗格和属性检查器。如果您在
coder.varsize声明中提供上界,则上界必须与属性检查器中的上界相匹配。请参阅声明可变大小的 MATLAB Function 模块变量。如果您没有在
coder.varsize声明中指定上界,并且代码生成器无法推断上界,则生成的代码将使用动态内存分配。动态内存分配可能会降低生成的代码的速度。在某些情况下,可以通过使用upperBounds参量指定上界来避免动态内存分配。如果使用
coder.varsize指定一个维度的上界为 1,则默认情况下,该维度具有固定大小 1。要指定维度可以是 0 或 1,请将variableSize向量的对应元素设置为true。例如,以下指令指定x的第一个维度具有固定大小 1,其他维度具有上界为5的可变大小。coder.varsize('x',[1 5 5])而以下代码指定
x的第一个维度是可变大小,上界为 1。coder.varsize("x",[1 5 5],[true true true])当您使用外部函数的输出时,代码生成器无法确定在代码生成时此输出的大小。请使用
coder.varsize指示代码生成器将用于存储此输出的变量视为可变大小。请参阅在运行时使用外部函数的可变大小输出。在某些情况下,您可以通过使用
coder.varsize强制元胞数组为同构元胞数组。请参阅Control Whether a Cell Array Is Variable-Size。
版本历史记录
在 R2011a 中推出