Этот вопрос относится к Matlab coder внешняя функциональность. Некоторые функции, такие как fprintf
, являются внешними в более старой версии Matlab и не являются неотъемлемой частью новых. Есть ли способ поддержать несколько версий Matlab, если coder.extrinsics
разрешен только на верхнем уровне, и его невозможно поставить в if
?Использование coder.extrinsics условно
0
A
ответ
2
Вы не можете условно выполнять некоторые функции extrinsic напрямую. Один из способов - использовать две разные функции, такие как fprintf_old и fprintf_new. fprintf_old будет иметь coder.extrinsic объявление, а затем вызывает fprintf. fprintf_new может вызывать fprintf без выражения extrinsic. Теперь вы можете выбирать между двумя вызовами, проверяя свою версию с условием, которое является постоянным во время компиляции. Например,
if coder.const(isOlderVersion())
fprintf_old();
else
fprintf_new();
end
1
В генерации кода, feval
constructs an extrinsic call к функции, указанный в первом аргументе. Поскольку вы можете встраивать вызовы в feval
внутри потока управления, его можно использовать для выборочного вызова функции по умолчанию и сохранения кода в одном исходном файле:
if isOlderVersion()
% Call fprintf extrinsically
feval('fprintf');
else
fprintf();
end