MESC TOOL NEWS:
MESCT-NC308WA-000116D
NC308WA, NC30WA, NC79WA, NC77WA
ご使用上のお願い
|
Cコンパイラ(アセンブラ・統合化開発環境付き)NC308WA, NC30WA, NC79WA, NC77WAの使用上の注意事項を連絡します。
-
該当製品
| M16C/80シリーズ用Cコンパイラ | NC308WA V.2.00 Release 1 |
| M16C/60,M16C/20シリーズ用Cコンパイラ | NC30WA V.3.20 Release 1 |
| 7900シリーズ用Cコンパイラ | NC79WA V.3.20 Release 1 |
| 77xxシリーズ用Cコンパイラ | NC77WA V.5.20 Release 1 |
-
内 容
float型またはdouble型の外部変数を初期化する際に、正しくデータが設定されない場合があります。
- 2.1 発生条件
- 以下の条件をすべて満たしている場合に発生します。
- (1)外部変数の初期化であること。
- (2)その外部変数の型が「float型またはdouble型」であること。
- (3)その外部変数が集合型(struct, union, 配列)であること。
- (4)「float型またはdouble型」が、その集合体中で連続して配置されていること。
- 2.2 発生例
-
-----------------------------------------------------------------
●構造体の例
struct S {
double d;
float f;
long l;
} s = {0.5, 0.6, 0};
●配列の例
double d[5] = {0.5, 0.6, 0.7, 0.8, 0.9};
union {
float f;
long l;
} u[5] = {0.5, 0.6, 0.7, 0.8, 0.9};
-----------------------------------------------------------------
-
回避策
- 3.1 構造体の場合
- 「float型またはdouble型」が構造体中で連続しないように配置してください。連続する場合は「3.2 配列の場合」を参照してください。
-
[記述例]
-----------------------------------------------------------------
struct S {
double d;
long l; /*float型またはdouble型以外のメンバを配置する*/
float f;
} s = {0.5, 0, 0.6};
-----------------------------------------------------------------
- 3.2 配列の場合
- 関数内で初期値を代入してください。
-
-----------------------------------------------------------------
double d[5];
void init(void)
{
d[0] = 0.5;
d[1] = 0.6;
d[2] = 0.7;
d[3] = 0.8;
d[4] = 0.9;
}
-----------------------------------------------------------------
-
恒久対策
本内容は、次期バージョンアップの際に改修する予定です。