Существуют специальные замечания, когда вы создаете MATLAB® функции, которые предназначаются для генерации кода. Они включают определенные ограничения, когда вы используете varargin
и varargout
, рекурсивные функции, анонимные функции и вложенные функции. Чтобы сгенерировать код для рекурсивных функций MATLAB, генератор кода использует или рекурсию времени компиляции или рекурсию во время выполнения. Чтобы произвести эффективный код C/C++, генератор кода иногда создает несколько версий функции, называемой функциональными специализациями. В определенных случаях можно препятствовать тому, чтобы генератор кода создал функциональные специализации при помощи coder.ignoreConst
и coder.ignoreSize
. При генерации MEX-функции можно обойти генерацию кода для определенной функции в коде MATLAB и вместо этого использовать движок MATLAB, чтобы выполнить вызов. Для этого используйте coder.extrinsic
создать.
coder.extrinsic | Объявите функцию как значение внешних параметров и выполните его в MATLAB |
coder.ignoreConst | Предотвратите использование постоянного значения выражения для функциональных специализаций |
coder.ignoreSize | Препятствуйте тому, чтобы генератор кода создал функциональные специализации для выражений постоянного размера |
coder.noImplicitExpansionInFunction | Отключите неявное расширение в заданной функции в сгенерированном коде |
Директива компиляции %#codegen
Укажите, что функция MATLAB предназначается для генерации кода.
Генерация кода для списков аргументов переменной длины
Сгенерируйте код для varargin
и varargout
.
Генерация кода для рекурсивных функций
Используйте рекурсивные функции в коде MATLAB, который предназначается для генерации кода.
Обеспечьте генератор кода, чтобы использовать рекурсию во время выполнения
Перепишите свой код MATLAB так, чтобы генератор кода использовал рекурсию во время выполнения вместо рекурсии времени компиляции.
Генерация кода для анонимных функций
Используйте анонимные функции в коде MATLAB, предназначенном для генерации кода.
Генерация кода для вложенных функций
Используйте вложенные функции в коде MATLAB, предназначенном для генерации кода.
Разрешение вызовов функции для генерации кода
Генератор кода использует правила приоритета, чтобы разрешить вызовы функции.
Разрешение типов файлов на пути генерации кода
Генератор кода использует правила приоритета, чтобы разрешить типы файлов.
Используйте MATLAB Engine, чтобы выполнить вызов функции в сгенерированном коде
Если функция не поддерживается для генерации кода, объявите, что он как extrinsic выполняется в MATLAB.
Непостоянный индекс в varargin или varargout в цикле for
Обеспечьте развертывание цикла, когда генератор кода не сможет определить значение индекса в varargin
или varargout
.
Избегайте дублирующихся функций в сгенерированном коде
Уменьшайте вхождение дублирующихся функций в сгенерированном коде.
Выходная переменная должна быть присвоена перед рекурсивным вызовом во время выполнения
Диагностируйте присвоение выходной переменной для рекурсии во время выполнения.
Достигнутый предел рекурсии времени компиляции
Диагностируйте предельную ошибку рекурсии времени компиляции.