Main Content

生成された C/C++ main 関数の例の構造

生成された C/C++ コードを使用するアプリケーションをビルドする場合、生成されたコードを呼び出す C/C++ main 関数を提供しなければなりません。

既定では、C/C++ ソース コード、スタティック ライブラリ、ダイナミック ライブラリおよび実行可能ファイルのコード生成用に、MATLAB® Coder™ は C/C++ main 関数の例を生成します。この関数は、生成された C/C++ コードのアプリケーションへの組み込みに役立つテンプレートです。main 関数の例は動的に割り当てられたデータなどのデータを宣言して初期化します。これは、エントリポイント関数を呼び出しますが、エントリポイント関数が返す値は使用しません。main 関数の例を使用するには、メイン ソース ファイルとヘッダー ファイルの例をビルド フォルダー以外の場所にコピーしてから、アプリケーションの要件を満たすように新しい場所でファイルを変更します。

MATLAB Coder は、ビルド フォルダーの examples サブフォルダーで main 関数の例に対するソース ファイルとヘッダー ファイルを生成します。C コード生成の場合、ファイル main.cmain.h を生成します。C++ コード生成の場合、ファイル main.cppmain.h を生成します。

ファイル main.c または main.cpp の内容

メイン ソース ファイルの例 main.c または main.cpp の場合、MATLAB Coder は、次のセクションを生成します。

既定では、MATLAB Coder は、アプリケーションで使用する main 関数の例を変更する際に役立つコメントもメイン ソース ファイルの例に生成します。

インクルード ファイル

このセクションにはメイン ソース ファイルの例に存在しないコードを呼び出す場合に必要なヘッダー ファイルが含まれます。メイン ソース ファイルの例を変更する際に外部関数を呼び出す場合、その他すべての必要なヘッダー ファイルを含めます。

関数宣言

このセクションはメイン ソース ファイルの例で定義された引数の初期化関数とエントリポイント関数用の関数のプロトタイプを宣言します。関数定義に加えた変更と一致するように関数のプロトタイプを変更します。メイン ソース ファイルの例で定義した関数用に新しい関数のプロトタイプを宣言します。

引数の初期化関数

このセクションはエントリポイント関数が引数として使用する各データ型の初期化関数を定義します。引数の初期化関数は、引数のサイズを既定値に初期化し、データの値をゼロに初期化します。次に、関数は初期化したデータを返します。これらのサイズとデータ値をアプリケーションの要件を満たすように変更します。

サイズの次元 <dimSizes> をもつ引数と MATLAB C/C++ データ型 <baseType> の場合、メイン ソース ファイルの例によって名前 argInit_<dimSizes>_<baseType> で初期化関数が定義されます。たとえば、MATLAB タイプのデータが double である 5 行 5 列の配列の場合、メイン ソース ファイルの例は引数の初期化関数 argInit_5x5_real_T を定義します。

MATLAB Coder は引数の初期化関数の名前を次のように変更します。

  • いずれかの次元が可変サイズの場合、MATLAB Coder はこれらの次元のサイズを d<maxSize> として指定します。ここで、<maxSize> はその次元の最大サイズになります。たとえば、最初の次元の静的サイズが 2 で、2 番目の次元のサイズが最大 10 まで変更可能な MATLAB のデータ型 double をもつ配列の場合、メイン ソース ファイルの例は引数の初期化関数 argInit_2xd10_real_T を定義します。

  • いずれかの次元が制限なしの場合、MATLAB Coder はこれらの次元のサイズを Unbounded として指定します。

  • 初期化関数の戻り値の型が emxArray の場合、MATLAB Coder は関数を emxArray へ返すポインターとして定義します。

  • 初期化関数の名前の長さが構成設定の関数名に対して設定された最大文字数を超過すると、MATLAB Coder は識別子を関数名の先頭に追加します。次に、MATLAB Coder は関数名を識別子の長さに許容される最大文字数まで切り捨てます。

    メモ

    既定では、生成された識別子に許容される最大文字数は 31 です。MATLAB Coder アプリを使用して識別子の最大の長さに対して値セットを指定するには、コード生成設定の [コード外観] タブで [識別子の最大の長さ] 値を選択します。コマンド ライン インターフェイスを使用して識別子の最大長さに対して値セットを指定するには、MaxIdLength 構成オブジェクト設定の値を変更します。

エントリポイント関数

このセクションは各 MATLAB エントリポイント関数の関数を定義します。MATLAB 関数 foo.m の場合、メイン ソース ファイルの例はエントリポイント関数 main_foo を定義します。この関数は変数を作成し、C/C++ ソース関数 foo.c または foo.cpp で必要なデータ初期化関数を呼び出します。これによってこの C/C++ ソース関数が呼び出されますが、結果は返されません。main_foo を変更して、アプリケーションの必要に応じて入力を受け取り出力を返すようにします。

main 関数

このセクションは次を実行する main 関数を定義します。

  • 出力言語が C の場合、変数 argcargv を宣言して名前を付けますが、それらを void にキャストします。出力言語が C++ の場合、生成された main の例は変数 argcargv を宣言しますが、名前は付けません。

  • エントリポイント関数をそれぞれ 1 回ずつ呼び出します。

  • コード生成に対して宣言された最初の MATLAB エントリポイント関数 foo の名前である終了関数 foo_terminate を呼び出します。main 関数で呼び出されるエントリポイント関数が複数ある場合でも、終了関数を 1 回のみ呼び出します。

  • ゼロを返します。

既定では、main 関数の例は初期化関数 foo_initialize を呼び出しません。コード ジェネレーターは、生成された C/C++ エントリポイント関数の先頭に初期化関数の呼び出しを含めます。生成されたコードには、複数のエントリポイント関数がある場合でも、初期化関数が自動的に一度だけ呼び出されることを確認するチェックも含まれます。

生成されるエントリポイント関数が初期化関数の呼び出しを含まないようにすることもできます。この選択を行う場合、次のいずれか 1 つを行います。

  • coder.CodeConfig オブジェクトまたは coder.EmbeddedCodeConfig オブジェクトで RunInitializeFcnfalse に設定します。

  • MATLAB Coder アプリで、[すべての設定] タブで [初期化関数を自動的に実行][いいえ] に設定します。

この選択を行うと、main 関数の例には初期化関数 foo_initialize の呼び出しが含まれます。

生成された初期化関数と終了関数の使用を参照してください。

アプリケーションの要件を満たすように、main の入出力およびエントリポイント関数などの main 関数を変更します。

ファイル main.h の内容

メイン ヘッダー ファイルの例 main.h の場合、MATLAB Coder は次を生成します。

既定では、MATLAB Coder は、アプリケーションで使用する main 関数の例を変更する際に役立つコメントも main.h に生成します。

インクルード ガード

main.h はインクルード ガードを使用してファイルの内容が複数回インクルードされないようにします。インクルード ガードには #ifndef 構造内にインクルード ファイルと関数宣言が含まれています。

インクルード ファイル

main.h にはその内部で定義されていないコードを呼び出すために必要なヘッダー ファイルが含まれています。

関数宣言

main.h はメイン ソース ファイルの例 main.c または main.cpp で定義される main 関数の関数プロトタイプを宣言します。

関連する例

詳細