C and C++


LANG.CAST.FN : 危険な関数キャスト

要旨

関数ポインタが、不適合なシグネチャや戻り値型を持つ別の関数ポインタにキャストされています。

プロパティ

クラス名 Dangerous Function Cast
日本語クラス名 危険な関数キャスト
クラス分類 信頼性 (reliability)
ニーモニック LANG.CAST.FN
カテゴリー
MisraC2023 MisraC2023:1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  MisraC2023:11.1 Conversions shall not be performed between a pointer to a function and any other type
Misra2012 Misra2012:1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  Misra2012:11.1 Conversions shall not be performed between a pointer to a function and any other type
Misra2004 Misra2004:11.1 Conversions shall not be performed between a pointer to a function and any type other than an integral type
AUTOSARC++14 AUTOSARC++14:A5-2-2 Traditional C-style casts shall not be used.
  AUTOSARC++14:M5-2-6 A cast shall not convert a pointer to a function to any other pointer type, including a pointer to function type.
  AUTOSARC++14:M8-4-4 A function identifier shall either be used to call the function or it shall be preceded by &.
MisraC++2008 MisraC++2008:5-2-4 C-style casts (other than void casts) and functional notation casts (other than explicit constructor calls) shall not be used.
  MisraC++2008:5-2-6 A cast shall not convert a pointer to a function to any other pointer type, including a pointer to function type.
  MisraC++2008:8-4-4 A function identifier shall either be used to call the function or it shall be preceded by &.
MisraC++2023 MisraC++2023:4.1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  MisraC++2023:8.2.2 C-style casts and functional notation casts shall not be used
CWE CWE:704 Incorrect Type Conversion or Cast
JSF++ JSF++:183 Every possible measure should be taken to avoid type casting.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Dangerous Function Cast"

typedef void (*thunk_t)(void);
typedef int (*int_unary_t)(int);
      
void A( void ) {}

int B( int i ) { 
    printf("%d", i); 
    return 1; 
}

void lang_cast_fn(void) {
    thunk_t thunk = (thunk_t)A;
    int_unary_t unary = (int_unary_t)B;
        
    thunk = (thunk_t)unary;  /* 'Dangerous Function Cast' warning issued here */
    thunk();
}

See also

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

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