Main Content

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

为代码生成定义标量结构体

通过赋值定义标量结构体时的限制

当通过将一个变量赋给预先存在的结构体来定义标量结构体时,不需要在赋值之前定义该变量。但是,如果您已定义该变量,它必须具有与您赋给它的结构体相同的类、大小和复/实性。在以下示例中,p 定义为与预定义的结构体 S 具有相同属性的结构体:

...
S = struct('a',  0, 'b',  1, 'c',  2);
p = S;
...

在每个控制流路径中以一致的顺序添加字段

在创建结构体时,必须在每个控制流路径中以相同的顺序添加字段。例如,以下代码生成编译器错误,因为它在每个 if 语句子句中以不同顺序添加结构体 x 的字段:

function y = fcn(u) %#codegen
if u > 0
   x.a = 10;
   x.b = 20;
else
   x.b = 30;  % Generates an error (on variable x)
   x.a = 40;
end
y = x.a + x.b;

在此示例中,在第一个 if 语句子句中对 x.a 的赋值位于 x.b 之前,但在 else 子句中赋值的顺序相反。以下是更正后的代码:

function y = fcn(u) %#codegen
if u > 0
   x.a = 10;
   x.b = 20;
else
   x.a = 40;
   x.b = 30;
end
y = x.a + x.b;

首次使用后添加新字段的限制

对结构体执行以下操作后,无法向该结构体中添加字段:

  • 从结构体中读取

  • 对结构体数组进行索引

  • 将结构体传递给函数

以如下代码为例:

...
x.c = 10; % Defines structure and creates field c
y = x; % Reads from structure
x.d = 20; % Generates an error
...

在此示例中,尝试在读取结构体 x 后添加新字段 d 会生成错误。

这种限制适用于整个结构体层次结构。例如,在对结构体的字段或嵌套结构体之一进行操作后,无法将字段添加到该结构体中,如此示例中所示:

function y = fcn(u) %#codegen

x.c = 10;
y = x.c;
x.d = 20; % Generates an error

在此示例中,在读取结构体 x 的字段 c 后,尝试向该结构体添加新字段 d 会生成错误。