C and C++


LANG.CAST.CSTYLE : Cスタイルのキャスト

要旨

[C++のみ]

C++のコードにおいて、以下に挙げるキャストメカニズムの一つが使用されています。

本ワーニングクラスの警告は、 例えコンストラクタがexplicitとマークされていない場合でも 単一引数のコンストラクタの呼び出しでは発生しません。この仕様は将来のリリースで変更される可能性があります。

プロパティ

クラス名 C-style Cast
日本語クラス名 Cスタイルのキャスト
クラス分類 スタイル (style)
ニーモニック LANG.CAST.CSTYLE
カテゴリー
AUTOSARC++14 AUTOSARC++14:A5-2-2 Traditional C-style casts shall not be used.
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++2023 MisraC++2023:8.2.2 C-style casts and functional notation casts shall not be used
JSF++ JSF++:183 Every possible measure should be taken to avoid type casting.
  JSF++:185 C++ style casts (const_cast, reinterpret_cast, and static_cast) shall be used instead of the traditional C-style casts.
対応言語 C++ のみ利用可能です。 C は利用できません。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="C-style Cast"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

// LANG.CAST.CSTYLE.cpp

int f_c_cast(short s){
    return (int) s;              // 'C-style Cast' warning issued here: C-style cast
}

int f_functional_cast(short s){
    return int(s);               // 'C-style Cast' warning issued here: functional notation cast
}

void f_void_cast(void){
  short s = 5;                                    // ok: not a cast
  (void) f_functional_cast(s);                    // ok: C-style cast to void
}

int* f_const_cast(const int *s){
    return const_cast<int*>(s);                    // ok: C++-style cast
}

class MyBase { int a; };
class MyDerived : public MyBase {int b; };

MyBase* f_dynamic_cast(MyDerived *d){
    return dynamic_cast<MyBase*>(d);              // ok: C++-style cast
}

MyBase* f_static_cast(MyDerived *d){
    return static_cast<MyBase*>(d);               // ok: C++-style cast
}
 
MyBase* f_reinterpret_cast(int i){
    return reinterpret_cast<MyBase*>(i);          // ok: C++-style cast
}

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

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