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

Если переменная управляет потоком: if, elseif, else оператор, или switch, case, otherwise оператор, объявите его как константу, чтобы генерация кода происходила только для одной ветви оператора.

В зависимости от особенностей переменной потока управления, можно объявить ее постоянной двумя способами:

Предотвратите генерацию кода, когда локальная переменная управляет потоком исполнения

  1. Задайте SquareOrCube функции который принимает переменный вход, in, и квадраты или кубики его элементов в зависимости от того, является ли переменная выбора, ch, установлено в s или c:

    function out = SquareOrCube(ch,in) %#codegen
     if ch=='s'
         out = in.^2;
     elseif ch=='c'
         out = in.^3;
     else 
         out = 0;
     end
  2. Сгенерируйте код для SquareOrCube использование codegen команда:

    codegen -config:lib SquareOrCube -args {'s',zeros(2,2)}

    Площади сгенерированного кода C или кубы элементы массива матрица 2 на 2 на основе входа для ch.

  3. Добавьте следующую линию к определению SquareOrCube:

    ch = 's';

    Сгенерированный код C квадратирует элементы массива матрицы 2 на 2. Переменная выбора, ch, и другие ветви if/elseif/if оператор не отображается в сгенерированном коде.

Предотвратите генерацию кода, когда входная переменная управляет потоком исполнения

  1. Задайте MathFunc функции, который выполняет различные математические операции на входе, in, в зависимости от значения входа, flag:

    function out = MathFunc(flag,in) %#codegen
      %# codegen
       switch flag
         case 1
            out=sin(in);
         case 2
            out=cos(in);
         otherwise
            out=sqrt(in);
       end
  2. Сгенерируйте код для MathFunc использование codegen команда:

    codegen -config:lib MathFunc -args {1,zeros(2,2)}

    Сгенерированный код C выполняет различные математические операции на элементах массива матрица 2 на 2 на основе входа для flag.

  3. Сгенерируйте код для MathFunc, объявляя аргумент, flag, как константа, использующая coder.Constant:

    codegen -config:lib MathFunc -args {coder.Constant(1),zeros(2,2)}

    Сгенерированный код C находит синус элементов массива матрицы 2 на 2. Переменная, flag, и switch/case/otherwise оператор не отображается в сгенерированном коде.

Похожие темы