coder.ignoreConst

Предотвратите использование постоянного значения выражения для специализаций функции

Описание

пример

coder.ignoreConst(expression) препятствует использованию генератором кода постоянного значения expression для создания функциональных специализаций. coder.ignoreConst(expression) возвращает значение expression.

Примеры

свернуть все

Использовать coder.ignoreConst чтобы предотвратить специализацию функции для функции, которая вызывается с постоянными значениями.

Напишите функцию call_myfn, который вызывает myfcn.

function [x, y] = call_myfcn(n)
%#codegen
x = myfcn(n, 'mode1');
y = myfcn(n, 'mode2');
end

function y = myfcn(n,mode)
coder.inline('never');
if strcmp(mode,'mode1')
    y = n;
else
    y = -n;
end
end

Сгенерируйте автономный код С Например, сгенерируйте статическую библиотеку. Включите отчет генерации кода.

codegen -config:lib call_myfcn -args {1} -report

В отчете генерации кода показаны две специализации функций для call_myfcn.

Генератор кода создает call_myfcn>myfcn>1 для mode со значением 'mode1'. Это создает call_myfcn>myfcn>2 для mode со значением 'mode2'.

В сгенерированном коде C вы видите специализации my_fcn и b_my_fcn.

static double b_myfcn(double n)
{
  return -n;
}

static double myfcn(double n)
{
  return n;
}

Чтобы предотвратить специализацию функции, поручите генератору кода игнорировать эти значения mode аргумент является постоянным.

function [x, y] = call_myfcn(n)
%#codegen
x = myfcn(n, coder.ignoreConst('mode1'));
y = myfcn(n, coder.ignoreConst('mode2'));
end

function y = myfcn(n,mode)
coder.inline('never');
if strcmp(mode,'mode1')
    y = n;
else
    y = -n;
end
end

Сгенерируйте код С

codegen -config:lib call_myfcn -args {1} -report

В отчете генерации кода не отображается несколько специализаций функций.

В сгенерированном коде C вы видите одну функцию для my_fcn.

Входные параметры

свернуть все

Выражение, значение которого должно рассматриваться как неконстантное, заданное как выражение MATLAB.

Подробнее о

свернуть все

Специализация функции

Версия функции, в которой тип, размер, сложность или значение входа настраивается для определенного вызова функции.

Специализация функции создает эффективный код С за счет дублирования кода. Отчет генерации кода показывает все Функциям MATLAB специализации, которые создает генератор кода. Однако специализации могут не появиться в сгенерированном коде C/C + + из-за последующих преобразований или оптимизации.

Совет

  • Для некоторых рекурсивных вызовов функций можно использовать coder.ignoreConst принудительная рекурсия во время выполнения. Смотрите Force Code Generator, чтобы использовать рекурсию во время выполнения.

  • coder.ignoreConst(expression) препятствует использованию генератором кода постоянного значения expression для создания функциональных специализаций. Это не препятствует другим применениям постоянного значения во время генерации кода.

Введенный в R2017a