MAEC TOOL NEWS:
MAECT-NC77WA-010701D
77xxシリーズ用Cコンパイラ (アセンブラ・統合化開発環境付き) NC77WAの使用上の注意事項を連絡します。
- 除算または剰余算に対して、Xフラグを正しく設定しないコードを生成する場合があります。
- 該当製品
NC77WA V.4.00 Release 1 ~ V.5.20 Release 4
- 内容
unsigned long型変数で除算または剰余算を行う場合に、Xフラグをクリアしないで除算または剰余算のランタイムライブラリを呼び出す場合があります。
- 2.1 発生条件
- 以下5点の条件をすべて満たす場合に発生することがあります。
- (1) 被除数は変数である。
- (2) 除数は定数である。
- (3) 被除数、除数のどちらか一方、または両方がunsigned long型である。
- (4) 除算・剰余算の直前で 「char型引数を持つ配列の添字」 を使用する。
- (5) 「(4)の配列」 の添字を、繰り返し文の条件判定に使用する。
※ 条件をすべて満たす場合でも、Cソースの構文次第では問題が発生しない場合があります。発生しない場合はまったく問題ありません。
- 2.2 発生例
-------------------------------------------------------------
void func(unsigned char ch, unsigned long *array)
{
unsigned long tmp;
while( ch-- != 0 ){ /* 発生条件(4), (5) */
array[ch] = tmp / 10; /* 発生条件(1), (2), (3) */
}
}
-------------------------------------------------------------
- 回避策
本現象が発生した場合には、配列の添字を char(signed charまたはunsigned char)型以外の型で記述してください。
[例]
-------------------------------------------------------------
void func(unsigned int ch, unsigned long *array)
{
unsigned long tmp;
while( ch-- != 0 ){
array[ch] = tmp / 10;
}
}
-------------------------------------------------------------
- 恒久対策
次バージョンにて改修する予定です。