如果代码生成器可以明确地确定C/ c++代码生成期间出现的每个变量的属性,那么您可以重用(重新分配)具有不同类、大小或复杂性的输入、输出或局部变量。如果是这样,MATLAB®在生成的代码中创建单独的唯一命名的局部变量。您可以在代码生成报告中查看这些重命名的变量。
变量重用的一个常见例子是if-elseif-else
或切换实例
语句。例如,下面的函数例二
首先使用变量t在一个如果
语句,其中包含一个标量double,然后重用t外的如果
语句保存双精度浮点数向量。
首先,t被用来保存一个标量双值t = mean(mean(u)) / numel(u);U = U - t;End % t被重用用于保存双精度t = find(u > 0)的向量;y =总和(u (t (2: end-1)));
如果在代码生成期间不能明确地确定变量出现的类、大小和复杂性,则不能重用(重新分配)变量。在这种情况下,不能重命名变量,并发生编译错误。
例如,下面example2
函数赋定点值x在如果
语句和重用x将一个双精度矩阵存储在其他的
条款。然后使用x后if - else
声明。此函数生成编译错误,因为if - else
声明变量x可以有不同的属性if - else
条款执行。
Function y = example2(use_fixpoint, data) %#codegen if use_fixpoint % x is fixed-point x = fi(data, 1,12,3);Else % x是一个双精度x = data的矩阵;当x在这里被重用时,不可能确定它的%类、大小和复杂度。Y = t > 0;结束
看看MATLAB如何重命名一个重用的变量t
:
创建一个MATLAB文件example1.m
包含以下代码。
首先,t被用来保存一个标量双值t = mean(mean(u)) / numel(u);U = U - t;End % t被重用用于保存双精度t = find(u > 0)的向量;y =总和(u (t (2: end-1)));结束
为生成一个MEX函数例二
并生成代码生成报告。
Codegen -o example1x -report example1。m参数{的(5,5)}
打开代码生成报告。
在变量选项卡,您将看到两个唯一命名的局部变量t > 1
和t > 2
.
在变量列表中,单击t > 1
.报告突出显示了变量的实例t
在如果
声明。这些实例的t
标量的两倍。
点击t > 2
.代码生成报告突出显示的实例t
在外面如果
声明。这些实例的t
变大小的列向量的上界是25
.
以下变量不能在生成的代码中重命名:
持续的变量。
全局变量。
变量传递到C代码使用coder.ref
,coder.rref
,coder.wref
.
使用coder.varsize
.
a的指标变量为
当它在循环体中使用时。
的块输出MATLAB函数块在Simulink中金宝app®模型。
statflow中MATLAB函数的图表拥有变量®图表。