C and C++


LANG.CAST.PC.OBJ : 異なるオブジェクトポインタ間のキャスト

要旨

オブジェクトへのポインタが異なるオブジェクトへのポインタ型にキャストされています。

例外:char *signed char *unsigned char * へのキャストはこのクラスのワーニングを引き起こしません。

プロパティ

クラス名 Cast: Object Pointers
日本語クラス名 異なるオブジェクトポインタ間のキャスト
クラス分類 スタイル (style)
ニーモニック LANG.CAST.PC.OBJ
カテゴリー
MisraC2023 MisraC2023:11.3 A conversion shall not be performed between a pointer to object type and a pointer to a different object type
Misra2012 Misra2012:11.3 A conversion shall not be performed between a pointer to object type and a pointer to a different object type
Misra2004 Misra2004:11.4 A cast should not be performed between a pointer to object type and a different pointer to object type
AUTOSARC++14 AUTOSARC++14:A5-2-4 reinterpret_cast shall not be used.
MisraC++2008 MisraC++2008:5-2-7 An object with pointer type shall not be converted to an unrelated pointer type, either directly or indirectly.
MisraC++2023 MisraC++2023:8.2.5 reinterpret_cast shall not be used
CWE CWE:704 Incorrect Type Conversion or Cast
TS17961 TS17961:5.1-ptrcomp 5.1. Accessing an object through a pointer to an incompatible type
CERT-C CERT-C:EXP36-C Do not cast pointers into more strictly aligned pointer types
JSF++ JSF++:182 Type casting from any type to or from pointers shall not be used.
  JSF++:183 Every possible measure should be taken to avoid type casting.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Cast: Object Pointers"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

void use_pointers(int *x, int *y, char *z);

void PC_OBJ(short *s){
    int *i = s;                                /* not a cast */
    int *j = (int *) s; /* 'Cast: Object Pointers' warning issued here */
    char *c = (char *) s;                      /* specific exception */
    use_pointers(i,j,c);
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。