C and C++


LANG.CAST.PC.INT : ポインタ型と整数型間の型変換

要旨

ポインタと整数型の間でキャストもしくは暗黙型変換しています。

例外:整数定数 0 とポインタの変換はこのクラスのワーニングを引き起こしません。

プロパティ

クラス名 Conversion: Pointer/Integer
日本語クラス名 ポインタ型と整数型間の型変換
クラス分類 スタイル (style)
ニーモニック LANG.CAST.PC.INT
カテゴリー
MisraC2023 MisraC2023:11.4 A conversion should not be performed between a pointer to object and an integer type
Misra2012 Misra2012:11.4 A conversion should not be performed between a pointer to object and an integer type
Misra2004 Misra2004:11.3 A cast should not be performed between a pointer type and an integral type
AUTOSARC++14 AUTOSARC++14:M5-2-8 An object with integer type or pointer to void type shall not be converted to an object with pointer type.
  AUTOSARC++14:M5-2-9 A cast shall not convert a pointer type to an integral type.
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++2008:5-2-8 An object with integer type or pointer to void type shall not be converted to an object with pointer type.
  MisraC++2008:5-2-9 A cast should not convert a pointer type to an integral type.
MisraC++2023 MisraC++2023:8.2.6 An object with integral, enumerated, or pointer to void type shall not be converted to an object with pointer type
  MisraC++2023:8.2.7 A cast should not convert a pointer type to an integral type
CWE CWE:704 Incorrect Type Conversion or Cast
TS17961 TS17961:5.6-argcomp 5.6. Calling functions with incorrect arguments
  TS17961:5.10-intptrconv 5.10. Converting a pointer to integer or integer to pointer
CERT-C CERT-C:INT31-C Ensure that integer conversions do not result in lost or misinterpreted data
  CERT-C:INT36-C Converting a pointer to integer or integer to pointer
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="Conversion: Pointer/Integer"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

char* PC_ItoP(int i){
    char *p = (char *) i;        /* 'Conversion: Pointer/Integer' warning issued here */
    char *pnull = (char *) 0;                   /* specific exception */
    char *pnullc = 0;                           /* specific exception */
    return p;
}

int PC_PtoI(char *c){
    int i = (int) c;             /* 'Conversion: Pointer/Integer' warning issued here */
    return i;
}

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

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