coder.cstructname(myStructVariable, 'myStruct')
указывает MATLAB Coder использовать указанное имя структуры myStruct
в качестве типа, в основном используя typedef struct {...} myStruct
.
Когда сгенерированный код должен ссылаться на переменную с этим typedef, MATLAB Coder будетвсе еще нужно сгенерировать имя переменной, которая не будет мешать типу, так что вы действительно можете видеть b_a_struct
как имя переменной. Если вы сохраните имя структуры для типа и имя переменной достаточно разными, вы, скорее всего, увидите ожидаемый код из генератора, например, когда сгенерирован код с codegen -config:lib myfun -report
из:
function [v, w, x] = myfun()
%#codegen
v = struct('a',1,'b',2);
coder.cstructname(v, 'myStruct');
w = struct('a', 1, 'b', 3);
coder.cstructname(w, 'b_struct');
x = struct('a', 1, 'b', 4);
coder.cstructname(x, 'a_struct');
end
Это приводит к чему-тонапример:
void myfun(myStruct *v, b_struct *w, a_struct *x)
{
v->a = 1.0;
v->b = 2.0;
w->a = 1.0;
w->b = 3.0;
x->a = 1.0;
x->b = 4.0;
}
Таким образом, мы действительно видим typedef во входных аргументах как указатели, а имена переменных совпадают (v
, w
и x
).
MATLABКодер достаточно хорош (иногда довольно агрессивен) в оптимизации сгенерированного кода, и его цель всегда состоит в том, чтобы обеспечить одинаковые выходные данные от функций точки входа с учетом указанных входных данных во время кодирования. Если вы вызываете сгенерированный код из другого кода C / C ++, фактические имена переменных в сгенерированном коде не должны быть слишком критичными, но, конечно, struct typedefs действительно имеет значение для взаимодействия между автоматически сгенерированным и другим кодом !!