При определении скалярной структуры путем назначения переменной существующей структуре нет необходимости определять переменную до назначения. Однако если эта переменная уже определена, она должна иметь те же класс, размер и сложность, что и назначенная ей структура. В следующем примере: p определяется как структура, которая имеет те же свойства, что и предопределенная структура S:
...
S = struct('a', 0, 'b', 1, 'c', 2);
p = S;
...При создании структуры необходимо добавлять поля в том же порядке на каждом пути управляющего потока. Например, следующий код создает ошибку компилятора, поскольку добавляет поля структуры x в разном порядке в каждом if положение инструкции:
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;
В этом примере присвоение x.a приходит раньше x.b в первом if предложение инструкции, но назначения отображаются в обратном порядке в 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 ...
В этом примере попытка добавить новое поле d после считывания из структуры x создает ошибку.
Это ограничение распространяется на иерархию структуры. Например, нельзя добавить поле в структуру после работы с одним из ее полей или вложенных структур, как в этом примере:
function y = fcn(u) %#codegen x.c = 10; y = x.c; x.d = 20; % Generates an error
В этом примере попытка добавить новое поле d к структуре x после считывания из поля структуры c создает ошибку.