При генерации кода C с использованием MATLAB Coder поведение отличается, когда if
происходит в теле другого if
или в разделе else
. Следующий случай легко создает C-код с выходом размером 5x5:
function y = foo1(u)
if u > 0
y = zeros(2,2);
else
y = zeros(5,5);
end
Теперь это тоже работает
function y = foo2(u,v)
if u > 0
y = zeros(2,2);
else
y = zeros(5,5);
if v > 0
y = 2 * y;
end
end
Но этот не сгенерирует код, жалуясь на несоответствие размера:
function y = foo3(u,v)
if u > 0
y = zeros(2,2);
if v > 0
y = 2 * y;
end
else
y = zeros(5,5);
end
Вот результат в командной строке:
>> codegen foo1.m -args {0}
>> codegen foo2.m -args {0,0}
>> codegen foo3.m -args {0,0}
??? Size mismatch (size [2 x 2] ~= size [5 x 5]).
The size to the left is the size of the left-hand side of the assignment.
Error in ==> foo3 Line: 8 Column: 5
Code generation failed: Open error report.
Error using codegen (line 144)
Я видел это поведение в MATLAB R2013b и R2015a.