RENESAS TOOL NEWS 2005年06月01日 : RSO-M3T-NC308WA_1-050601D
M3T-NC308WAおよびM3T-NC30WA
ご使用上のお願い
--関数の実引数にポインタまたはアドレスを渡す場合-- |
M16Cファミリ用CコンパイラパッケージM3T-NC308WAおよびM3T-NC30WAの使用上の注意事項を連絡します。
- 関数の実引数にポインタまたはアドレスを渡す場合の注意事項
- 該当製品
M32C/90, M32C/80シリーズ, M16C/80 および M16C/70シリーズ用:
M3T-NC308WA V.5.20 Release 02
M16C/60, M16C/30, M16C/20, M16C/10, M16C/Tiny および R8C/Tinyシリーズ用:
M3T-NC30WA V.5.30 Release 02
- 内容
ポインタを引数に持つ関数を呼び出す際に、正しい型の引数を渡しても 誤って警告メッセージを出力することがあります。
- 2.1 発生条件
- 以下の条件をすべて満たす場合に発生します。
| (1) |
呼び出される関数の仮引数がconst修飾されていないポインタ型である。 |
| (2) |
(1)の関数の実引数が、const修飾されたポインタまたはアドレス定数である。 |
| (3) |
(2)のconst修飾されたポインタが指す型は、(1)のポインタが指す型と同じ型である。 |
- 2.2 発生例
-
-------------------------------------------------------------
void subr2( int * ); /* 発生条件(1)および(3) */
extern int var;
int * const p = &var; /* 発生条件(2)および(3) */
void mainr2(void)
{
subr2( p ); /* 発生条件(2) */
}
-------------------------------------------------------------
- 回避策
キャスト演算子を用いて、実引数を仮引数の型へ明示的に型変換してください。
-------------------------------------------------------------
void subr2( int * );
extern int var;
int * const p = &var;
void mainr2(void)
{
subr2( (int*)p ); /* キャスト演算子を挿入 */
}
-------------------------------------------------------------
- 恒久対策
次期バージョンで改修する予定です。