RENESAS TOOL NEWS 2004年11月01日 : RSO-SQMlint-041101D
MISRA Cルールチェッカ SQMlint
ご使用上のお願い
|
MISRA Cルールチェッカ SQMlint(ルネサス製コンパイラ用拡張機能)の使用上の注意事項を連絡します。
- sizeofのオペランドがtypedef名である場合の注意事項
- 該当製品
SQMlint V.1.00 Release 1 ~ V.1.01 Release 00
- 内容
sizeof演算子のオペランドがtypedef名である場合に、システムエラーが発生することがあります。
- 2.1 発生条件
- 以下の条件をすべて満たす場合に発生します。
| (1) | typedefを用いて不完全型の構造体を宣言している。 |
| (2) | (1)の宣言の後で、(1)の構造体を定義している。 |
| (3) | sizeof演算子のオペランドが、(1)のtypedef名である。 |
- 2.2 発生例
-------------------------------------------------------------
typedef struct TAG typedef_name; /* 発生条件(1) */
struct TAG /* 発生条件(2) */
{
char member1;
};
void func(void)
{
int i = sizeof(typedef_name); /* 発生条件(3) */
}
-------------------------------------------------------------
- 回避策
以下のいずれかの方法で回避してください。
(1) typedef宣言の先に、typedefで使用する構造体を定義する。
------------------------------------------------------
struct TAG
{
char member1;
};
typedef struct TAG typedef_name;
void func(void)
{
int i = sizeof(typedef_name);
}
------------------------------------------------------
(2) typedef名ではなく、typedef宣言中で使用した構造体タグをsizeof演算子のオペランドに使用する。
------------------------------------------------------
typedef struct TAG typedef_name;
struct TAG
{
char member1;
};
void func(void)
{
int i = sizeof(struct TAG);
}
------------------------------------------------------
- 恒久対策
次期バージョンで改修する予定です。