Main Content

生成コードの型への MATLAB 型のマッピング

コード ジェネレーターは、MATLAB® コードで使用するデータ型に対応する C/C++ のデータ型を生成します。生成されるデータ型はターゲット プラットフォームとコンパイラに依存します。コード ジェネレーターは、組み込みの C データ型 (shortlongint など)、または C の typedef ステートメントを使用して定義されるカスタム データ型のいずれかを生成できます。既定では、コード ジェネレーターはスタンドアロン コード (lib、dll または exe) に対しては組み込みデータ型、MEX コードに対してはカスタム データ型を生成します。組み込みの C の型を使用するには、コード生成構成オブジェクトの DataTypeReplacement プロパティを変更するか、MATLAB Coder™ アプリを使用します。詳細については、生成コードで使用されるデータ型の指定を参照してください。

カスタム C/C++ 型を生成するために、コード ジェネレーターは、fullfile(matlabroot,'extern','include') に配置されているヘッダー ファイル tmwtypes.h の事前定義されたデータ型を使用します。コード ジェネレーターは、MATLAB コードの解析に基づいてカスタム データ型を生成することもできます。カスタム データ型は、コード生成ディレクトリに配置されているファイル rtwtypes.hmyFunction_types.h で定義されます。myFunction は最上位の関数の名前です。コード ジェネレーターは、MATLAB 内に存在するすべてのデータ型に対してコードを生成できるわけではありません。C/C++ コード生成でサポートされている MATLAB 言語機能を参照してください。

組み込みの C データ型を使用しないときは、コード ジェネレーターは以下のデータ型を生成します。

MATLAB データ型対応するカスタム C/C++ データ型
logicalboolean_T
charchar_T
stringrtString
int8int8_T
int16int16_T
int32int32_T
int64int64_T
uint8uint8_T
uint16uint16_T
uint32uint32_T
uint64uint64_T
singlereal32_T
doublereal_T
complex複素数型を参照してください。
struct構造体の型を参照してください。
fi固定小数点型を参照してください。

変数が参照渡しされるとき、対応するカスタム データ型は逆参照演算子を使用します。たとえば、参照渡しされる際の int8 の対応するカスタム C/C++ データ型は int8_T* です。

動的に割り当てられた配列はカスタム emxArray_ 型にマッピングされます。たとえば、動的に割り当てられた char 配列は emxArray_char_T の型にマッピングされます。動的に割り当てられた double 配列は emxArray_real_T 型にマッピングされます。動的な割り当ては、たとえばコンパイル時に配列サイズが不明である場合や、明示的な上限を指定せずに coder.varsize を使用して可変サイズの配列を作成する場合に発生します。可変サイズ配列の詳細については、生成された関数インターフェイスでの C 配列の使用を参照してください。

複素数型

MATLAB では、実数/複素数はデータ型のプロパティとして定義されます。次の表に、コード ジェネレーターが MATLAB の複素数データ型に対して使用する事前定義されたデータ型を示します。

MATLAB の複素数データ型対応するカスタム C/C++ データ型
int8cint8_T
int16cint16_T
int32cint32_T
int64cint64_T
uint8cuint8_T
uint16cuint16_T
uint32cuint32_T
uint64cuint64_T
singlecreal32_T
doublecreal_T

コード ジェネレーターは、各複素数値を、実数部 re と虚数部 im をもつ構造体として定義します。例として、tmwtypes.h からの creal32_Ttypedef を参照してください。

typedef struct {
  real32_T re;/* Real component*/
  real32_T im;/* Imaginary component*/
} creal32_T;
creal32_T 型の変数 x を定義するとします。生成されたコードは、実数部を x.re として、虚数部を x.im としてアクセスします。

C/C++ ライブラリが異なる表現を必要とする場合、たとえば coder.cstructname を使用して、MATLAB Coder の複素数型の独自バージョンを定義することができます。ただし、定義において実数部には re、虚数部には im という名前を使用しなければなりません。

詳細については、複素数データのコード生成を参照してください。

構造体の型

MATLAB Coder は、構造体をフィールド単位で C/C++ の型にマッピングします。MATLAB 定義での構造体フィールドの順序が保持されます。生成される C/C++ 構造体の型の名前を制御するか、定義を指定するには、関数 coder.cstructname を使用します。動的メモリ割り当てを使用しない場合は、構造体内の配列は 1 次元の配列に変換され、ポインターには変換されません。詳細については、構造体を参照してください。

固定小数点型

C/C++ データ型は fi オブジェクトの numerictype プロパティによって決定されます。既定では、コード ジェネレーターは組み込みの C/C++ 型の使用を試みます。ただし、カスタム C/C++ データ型を代わりに使用するよう選択することもできます。次の表は、SignednessWordLength および FractionLength の各プロパティがどのようにカスタム C/C++ データ型を決定するかを示しています。カスタム C/C++ データ型は、ワード サイズに基づいて、固定小数点の値を格納できる一段大きいターゲット ワード サイズとなります。整数型の符号は、固定小数点型の符号と一致します。

符号属性語長小数部の長さ対応するカスタム C/C++ データ型
187int8_T
1 1310int16_T
11615int16_T
01915uint32_T

文字ベクトル

MATLAB Coder ソフトウェアは、MATLAB 文字ベクトルを C/C++ 文字配列にマッピングします。これらの文字配列は、null で終了しないため C/C++ 文字列ではありません。MATLAB 文字ベクトルを、C/C++ 文字列を必要とする外部 C/C++ コードに渡す場合、生成される C/C++ 文字配列は null で終了しなければなりません。null で終了する C/C++ 文字配列を生成するには、MATLAB 文字ベクトルの終わりに 0 を追加します。たとえば、['sample text' 0] とします。これをしないと、文字列を想定している生成コードの動作がコンパイラ エラーや警告なしに停止する可能性があります。

マルチワードの型

マルチワードの型は、ターゲット ハードウェアが MATLAB データ型を組み込みの C/C++ 型に格納できないときに生成されるカスタム型です。マルチワードの型は、整数の配列を含む C/C++ 構造体型として生成されます。配列の次元は、ターゲット ハードウェアの最も幅広の整数型のサイズに依存します。

たとえば、128 ビットの固定小数点型の場合、ターゲット ハードウェアの最も幅広の整数型が 32 ビットであれば、ソフトウェアは 4 つの 32 ビット整数からなる配列を 1 つ含む構造体を生成します。

typedef struct
{
  unsigned int  chunks[4];
} uint128m_T;

ターゲット ハードウェアの最も幅広の整数型が 64 ビットのサイズをもつ long であれば、コード ジェネレーターは 2 つの 64 ビット長の型からなる配列を 1 つ含む構造体を生成します。

typedef struct
{
  unsigned long chunks[2];
} uint128m_T;

64 ビットの整数 MATLAB 型から生成される C/C++ データ型は、ターゲット ハードウェアでの整数型のサイズに依存します。64 ビットを格納するのに十分な幅をもつ組み込み型が存在しない場合、64 ビットの MATLAB Coder 型はカスタム マルチワード型にマッピングされます。

参考

|

関連するトピック