MAEC TOOL NEWS:
MAECT-M3T-NC308WA-021201D
M3T-NC308WA, M3T-NC30WA
ご使用上のお願い
|
Cコンパイラ(アセンブラ・統合化開発環境付き) M3T-NC308WA, M3T-NC30WA の使用上の注意事項を連絡します。
- inline関数定義の直後に#pragma ASM--ENDASMを記述する場合の注意事項
- inline関数を定義する場合の注意事項
- inline関数定義の直後に#pragma ASM--ENDASMを記述する場合の注意事項
- 1.1 該当製品
- M32C/80, M16C/80, M16C/70シリーズ用
- M3T-NC308WA V.5.00 Release 1
- M16C/60, M16C/30, M16C/20, M16C/10シリーズ用
- M3T-NC30WA V.5.00 Release 1, V.5.00 Release 2
- 1.2 内容
- inline関数定義の直後に #pragma ASM--ENDASM を記述した場合、parse error が発生します。
- 1.3 発生例
---------------------------------------------
inline void func(void)
{
/* インライン関数の処理 */
}
#pragma ASM
; アセンブリ言語の記述
#pragma ENDASM
---------------------------------------------
- 1.4 回避策
- 以下のいずれかの方法で回避してください。
- (1) #pragma ASM--ENDASMをinline関数定義の前に記述する。
[例]
---------------------------------------------
#pragma ASM
; アセンブリ言語の記述
#pragma ENDASM
inline void func(void)
{
/* インライン関数の処理 */
}
---------------------------------------------
- (2) inline関数定義と#pragma ASM--ENDASMの間にinline関数以外の関数を定義する。
[例]
---------------------------------------------------------------
inline void func(void)
{
/* インライン関数の処理 */
}
static void dummy(void){} /* inline 関数以外の関数を定義 */
#pragma ASM
; アセンブリ言語の記述
#pragma ENDASM
---------------------------------------------------------------
- 1.5 恒久対策
- 本内容は、次期バージョンアップにて改修する予定です。
M3T-NC308WA, M3T-NC30WA ご使用上のお願い
MAECT-M3T-NC308WA-021201D
- inline関数を定義する場合の注意事項
- 2.1 該当製品
- M16C/60, M16C/30, M16C/20, M16C/10シリーズ用
- M3T-NC30WA V.5.00 Release 1, V.5.00 Release 2
- 2.2 内容
- inline関数を定義すると System Error が発生する場合があります。
- 2.3 発生条件
- 以下の条件をすべて満たす場合に System Error が発生します。
- (1) 最適化オプション -O、-O[3-5]、-OR、または -OS のうち、ひとつ以上を指定している。
- (2) 最後のinline関数定義からファイルの最後までにinline関数以外の関数定義がない。
- (3) 最後のinline関数定義からファイルの最後までにextern指定された変数宣言がある。
- (4) (3)の変数宣言からファイルの最後までに(3)の変数の初期化子つき宣言がある。
- [補足] (2) (3) のinline関数定義はインクルードされるファイルの中で定義されている場合も含みます。
- 2.4 発生例
---------------------------------------------
inline void func(void)
{
/* インライン関数の処理 */
}
extern int i; /* 発生条件(3) */
int i = 0; /* 発生条件(4) */
---------------------------------------------
- 2.5 回避策
- inline 関数定義の後ろにダミー関数を定義してください。
[例]
--------------------------------------------------------
inline void func(void)
{
/* インライン関数の処理 */
}
static void dummy(void){} /* ダミー関数を定義 */
extern int i;
int i = 0;
--------------------------------------------------------
- 2.6 恒久対策
- 本内容は、次期バージョンアップにて改修する予定です。