Main Content

coder.ignoreConst

関数の特殊化の式における定数値の使用の防止

説明

coder.ignoreConst(expression) はコード ジェネレーターが expression の定数値を使用して関数の特殊化を作成するのを防止します。coder.ignoreConst(expression)expression の値を返します。

すべて折りたたむ

coder.ignoreConst を使用し、定数値で呼び出される関数に対する関数の特殊化を防止します。

myfcn を呼び出す関数 call_myfn を記述します。

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

スタンドアロン C コードを生成します。たとえば、スタティック ライブラリを生成します。コード生成レポートを有効にします。

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

コード生成レポートに、call_myfcn に対する関数の特殊化が 2 つ表示されます。

This image shows the function call_myfcn and the function specializations in the code generation report.

コード ジェネレーターは値が 'mode1'modecall_myfcn>myfcn>1 を生成します。'mode2' の値をもつ modecall_myfcn>myfcn>2 を作成します。

生成された C コードで特殊化 my_fcnb_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

C コードを生成します。

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

コード生成レポートに複数の関数の特殊化は表示されません。

This image shows the function call_myfcn after instructing the code generator to ignore that the values of the mode argument are constant in the code generation report.

生成された C コードでは、my_fcn の 1 つの関数が表示されます。

入力引数

すべて折りたたむ

値が非定数として扱われる式。MATLAB 式として指定します。

詳細

すべて折りたたむ

関数の特殊化

入力タイプ、サイズ、実数/複素数または値が関数の特定の呼び出し用にカスタマイズされる関数のバージョン。

関数の特殊化により効率的な C コードが生成されますが、コードが重複します。コード生成レポートにはコード ジェネレーターが作成するすべての MATLAB 関数の特殊化が表示されます。ただし、特殊化は後で変換または最適化されるため、生成した C/C++ コードには表示されない場合があります。

ヒント

  • 一部の再帰的関数呼び出しでは、coder.ignoreConst を使用して実行時の再帰を強制的に使用させることができます。コード ジェネレーターで実行時の再帰を強制的に使用させるを参照してください。

  • coder.ignoreConst(expression) はコード ジェネレーターが expression の定数値を使用して関数の特殊化を作成するのを防止します。コード生成中の定数値のその他の使用は防止しません。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2017a で導入