メインコンテンツ

エントリポイント関数の入力の型の指定

C および C++ は静的に型付けされる言語であるため、コード ジェネレーターはコード生成中に、生成されたコード内のすべての変数のクラスとサイズを決定する必要があります。特定の変数型を含む C/C++ コードを生成するには、エントリポイント関数へのすべての入力の型を指定する必要があります。入力の型の指定は、コード生成のワークフローの重要な手順です。

エントリポイント関数に入力がない場合は、この手順をスキップできます。非エントリポイント関数への入力のクラスとサイズを指定する必要はありません。

入力の型の指定方法

エントリポイント関数へのすべての入力のクラスとサイズを指定する必要があります。クラス、構造体、cell 配列などの集約型の場合は、各プロパティ、フィールド、および要素のクラスとサイズもそれぞれ指定する必要があります。入力の型の指定は、MATLAB® Coder™ アプリを使用するか、コマンド ラインで -args オプションを指定した codegen コマンドを使用するか、MATLAB エントリポイント関数で関数の引数の検証 (arguments ブロック) を使用するか、MATLAB コード内で前提条件 (assert ステートメント) を使用して行うことができます。次の表は、これらの各方法の長所と短所をまとめたものです。

方法長所短所

MATLAB Coder アプリを使用したエントリポイントの入力の型の定義

  • cell や構造体などの集約データ型を指定する場合でも使いやすい

  • 元の MATLAB コードを変更しない。

  • コード ジェネレーターによって型定義がプロジェクト ファイルに保存される

  • 入力の型が MATLAB コードでドキュメント化されない

Specify Input Types at the Command Line

  • 少ない入力で関数のプロトタイピングを行うために設計されている

  • 固定サイズの非集約の入力や、例で指定できる入力に使いやすい

  • 元の MATLAB コードを変更しない。

  • スクリプトを使用しない限り、コードを生成するたびに入力を指定しなければならない

  • 可変サイズまたは集約の入力の構文は複雑になることがある

Use Function Argument Validation to Specify Entry-Point Input Types

  • 専用のコード ブロックでのコード生成に必要な引数の側面を指定できる

  • assert ステートメントを使用した入力の型の指定と比較して、MATLAB コードが明確で簡潔になる

  • MATLAB Coder アプリまたはコマンド ラインでコードを生成するたびに入力の型を指定しないため、コード生成が簡略化する

  • MATLAB エントリポイント関数の引数の仕様をドキュメント化する。

MATLAB コードで assert ステートメントを使用した入力の型の指定

  • MATLAB Coder アプリまたはコマンド ラインでコードを生成するたびに入力の型を指定しないため、コード生成が簡略化する

  • MATLAB コードで引数の仕様がドキュメント化される

  • 複雑な構文を使用する。

  • assert ステートメントは MATLAB コード内のどこにでも現れる可能性があるため、コード生成中や実行時に発生した入力の型の指定に関連する問題を診断するのが困難になることがある

未使用の入力

1 つ以上のエントリポイント関数に未使用の入力変数がある場合、コード生成には、使用している入力の型の指定方法に応じた特定の考慮事項があります。

  • -args オプションを指定した codegen 関数を使用して入力の型を指定する場合、未使用の入力変数を指定する必要はありません。ただし、使用されているすべての変数が、関数宣言内ですべての未使用の変数より前に出現する必要があります。未使用および未指定の変数は、生成されたコードには出現しません。

  • MATLAB エントリポイント関数への入力がすべて未使用で、-args オプションを指定した codegen 関数を使用して入力の型を指定する場合は、空の cell 配列 {}-args に渡すことで、入力のない C/C++ 関数を生成できます。

  • MATLAB Coder アプリを使用して入力の型を指定する場合は、未使用の入力の型を指定する必要があります。未使用の入力は、生成されたコードに出現します。

  • arguments ブロックまたは assert ステートメントを使用して MATLAB コードで入力の型を定義する場合は、未使用の入力の型を指定する必要があります。チルダ記号 (~) を使用して未使用の入力を指定することはできません。未使用の入力は、生成されたコードに出現します。

ヒント

  • 固定小数点の fi (Fixed-Point Designer) オブジェクトである入力を指定するには、関連する numerictype (Fixed-Point Designer) および fimath (Fixed-Point Designer) オブジェクトを構成する必要があります。

  • エントリポイント関数から複数シグネチャの MEX 関数を生成するには、同じエントリポイント関数に対して複数の -args を指定します。生成された MEX 関数は、コード生成中に指定した複数のシグネチャで動作します。複数シグネチャの MEX 関数の生成の詳細については、複数のシグネチャをもつ関数のコードの生成を参照してください。

  • 特定の形状の空配列を受け入れる MEX、SIL、または PIL 関数を生成した場合、生成された関数は他の形状の空配列も受け入れます。MEX、SIL、または PIL 関数は、コード生成中に指定された配列の形状と一致するように、空の実行時の入力配列の形状を変更します。MEX、SIL、および PIL 関数での空配列のサイズ変更による MATLAB との非互換性を参照してください。

参考

トピック