このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ターゲット システムの言語標準の設定
コード ジェネレーターが数学演算に使用する標準ライブラリ拡張を指定します。新しいモデルまたは新しいコンフィギュレーション セット オブジェクトをもつモデルのコードを生成する場合、コード ジェネレーターは既定で ISO®/IEC 9899:1999 C (C99 (ISO)) ライブラリを使用します。既存のモデルおよび既存のコンフィギュレーション セット オブジェクトについては、コード ジェネレーターは [言語標準] パラメーターで指定されているライブラリを使用します。
コンパイラが ISO®/IEC 9899:1990 (C89/C90 (ANSI))、ISO/IEC 14882:2003(C++03 (ISO) または ISO/IEC 14882:2011(C++11 (ISO)) 数学ライブラリ拡張をサポートしている場合、言語標準設定を変更できます。C++03 (ISO) または C++11 (ISO) ライブラリは、プログラミング言語に C++ を選択する場合に使用できます。
C99 ライブラリは、コンパイラによって提供される標準の ANSI C を超えるパフォーマンスを活用します。C99 ライブラリを使用すると、コード ジェネレーターは可能な場合 ISO C 関数の呼び出しを生成します。たとえば、生成コードでは、sqrt() の代わりに単精度データの演算を行う関数 sqrtf() を呼び出します。
ライブラリ設定を変更するには、[コンフィギュレーション パラメーター]、[コード生成]、[言語標準] パラメーターを使用します。コマンド ラインの対応するコマンドは TargetLangStandard です。
ANSI C コードの生成と検査
1. モデル例 CStandardMathLib を開きます。

2. コードを生成します。
### Searching for referenced models in model 'CStandardMathLib'. ### Total of 1 models to build. ### Starting build procedure for: CStandardMathLib ### Successful completion of code generation for: CStandardMathLib Build Summary Top model targets: Model Build Reason Status Build Duration ====================================================================================================== CStandardMathLib Information cache folder or artifacts were missing. Code generated. 0h 0m 7.9795s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 8.5197s
3. 生成されたファイル CStandardMathLib.c のコードを調べます。コードでは関数 sqrt を呼び出していることに注意します。
if (rtb_Abs2 < 0.0F) {
rtb_Abs2 = -(real32_T)sqrt((real32_T)fabs(rtb_Abs2));
} else {
rtb_Abs2 = (real32_T)sqrt(rtb_Abs2);
}
/* Gain: '<Root>/Gain1' incorporates:
* Constant: '<Root>/Constant'
* Sqrt: '<Root>/get_hypot1'
* Sum: '<Root>/Sum'
*
* About '<Root>/get_hypot1':
* Operator: signedSqrt
*/
rtb_Abs2 = (rtb_Abs2 - 1.0F) * 343.0F;
/* Rounding: '<Root>/fix1' */
if (rtb_Abs2 < 0.0F) {
/* Outport: '<Root>/Out1' */
CStandardMathLib_Y.Out1 = (real32_T)ceil(rtb_Abs2);
} else {
/* Outport: '<Root>/Out1' */
CStandardMathLib_Y.Out1 = (real32_T)floor(rtb_Abs2);
}
/* End of Rounding: '<Root>/fix1' */
/* Abs: '<Root>/Abs2' incorporates:
* Inport: '<Root>/In2'
*/
rtb_Abs2 = (real32_T)fabs(CStandardMathLib_U.In2);
/* Outport: '<Root>/Out2' incorporates:
* Constant: '<Root>/Constant1'
* Gain: '<Root>/Gain2'
* Math: '<Root>/get_hypot2'
* Rounding: '<Root>/fix2'
* Sum: '<Root>/Sum2'
* Trigonometry: '<S1>/cos'
* Trigonometry: '<S1>/sin'
*/
CStandardMathLib_Y.Out2 = (real32_T)floor((rt_hypotf_snf((real32_T)sin
(rtb_Abs2), (real32_T)cos(rtb_Abs2)) - 1.0F) * 343.0F);
}
/* Model initialize function */
void CStandardMathLib_initialize(void)
{
/* Registration code */
/* initialize non-finites */
rt_InitInfAndNaN(sizeof(real_T));
/* initialize error status */
rtmSetErrorStatus(CStandardMathLib_M, (NULL));
/* external inputs */
(void)memset(&CStandardMathLib_U, 0, sizeof(ExtU_CStandardMathLib_T));
/* external outputs */
(void)memset(&CStandardMathLib_Y, 0, sizeof(ExtY_CStandardMathLib_T));
}
/* Model terminate function */
void CStandardMathLib_terminate(void)
{
/* (no terminate code required) */
}
ISO C コードの生成と検査
1. [言語標準] の設定を C99 (ISO) に変更します。または、コマンド ラインで、TargetLangStandard を C99 (ISO) に設定します。
2. コードを再度生成します。
### Searching for referenced models in model 'CStandardMathLib'. ### Total of 1 models to build. ### Starting build procedure for: CStandardMathLib ### Successful completion of code generation for: CStandardMathLib Build Summary Top model targets: Model Build Reason Status Build Duration ====================================================================================================== CStandardMathLib Information cache folder or artifacts were missing. Code generated. 0h 0m 7.1163s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 7.6111s
3. 生成されたファイル CStandardMathLib.c のコードを再度調べます。生成されたコードでは sqrt ではなく関数 sqrtf を呼び出すようになりました。
if (rtb_Abs2 < 0.0F) {
rtb_Abs2 = -sqrtf(fabsf(rtb_Abs2));
} else {
rtb_Abs2 = sqrtf(rtb_Abs2);
}
/* Outport: '<Root>/Out1' incorporates:
* Constant: '<Root>/Constant'
* Gain: '<Root>/Gain1'
* Rounding: '<Root>/fix1'
* Sqrt: '<Root>/get_hypot1'
* Sum: '<Root>/Sum'
*
* About '<Root>/get_hypot1':
* Operator: signedSqrt
*/
CStandardMathLib_Y.Out1 = truncf((rtb_Abs2 - 1.0F) * 343.0F);
/* Abs: '<Root>/Abs2' incorporates:
* Inport: '<Root>/In2'
*/
rtb_Abs2 = fabsf(CStandardMathLib_U.In2);
/* Outport: '<Root>/Out2' incorporates:
* Constant: '<Root>/Constant1'
* Gain: '<Root>/Gain2'
* Math: '<Root>/get_hypot2'
* Rounding: '<Root>/fix2'
* Sum: '<Root>/Sum2'
* Trigonometry: '<S1>/cos'
* Trigonometry: '<S1>/sin'
*/
CStandardMathLib_Y.Out2 = floorf((rt_hypotf_snf(sinf(rtb_Abs2), cosf(rtb_Abs2))
- 1.0F) * 343.0F);
}
/* Model initialize function */
void CStandardMathLib_initialize(void)
{
/* Registration code */
/* initialize error status */
rtmSetErrorStatus(CStandardMathLib_M, (NULL));
/* external inputs */
(void)memset(&CStandardMathLib_U, 0, sizeof(ExtU_CStandardMathLib_T));
/* external outputs */
(void)memset(&CStandardMathLib_Y, 0, sizeof(ExtY_CStandardMathLib_T));
}
/* Model terminate function */
void CStandardMathLib_terminate(void)
{
/* (no terminate code required) */
}