メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2023 Rule 10.5

The value of an expression should not be cast to an inappropriate essential type

R2024a 以降

説明

ルール定義

The value of an expression should not be cast to an inappropriate essential type 1 .

根拠

変数の型間の変換

 変換元
boolean 文字 enum 符号付き 符号なし 実数の浮動小数点 複素数の浮動小数点
変換先 boolean  回避回避回避回避回避回避
文字 回避    回避回避
enum 回避回避回避回避回避回避回避
符号付き 回避      
符号なし 回避      
実数の浮動小数点 回避回避     
複素数の浮動小数点 回避回避     

不適切な明示的キャストの例は以下のとおりです。

  • C99 では、_Bool への代入のキャスト結果は常に 0 か 1 となる。この結果は実質的な boolean 型として定義される別の型にキャストする場合は必ずしも当てはまらない。

  • 実質的な enum 型へのキャストは、その型の列挙定数のセットにない値になる可能性がある。

  • 実質的な boolean 型からそれ以外の型へのキャストにほとんど意味はない。

  • 浮動小数点型と文字型の間での変換は、2 つの表現の間に正確なマッピングが存在しないため、意味はない。

許容可能な明示的キャストの例は以下のとおりです。

  • 後に続いて算術演算が実行される型を変更する。

  • 意図的に値を切り捨てる。

  • 明瞭性のため型変換を明示的にする。

実質的な型についての詳細は、MISRA C Rule 10.x の実質的な型を参照してください。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

次の例は、適切かつ実質的な型の間の準拠するキャストと、不適切な型の間の非準拠のキャストを示しています。

#include <stdbool.h>
#include <stdint.h>

enum vehicleType { CAR, TRUCK, MOTORCYCLE } vehicle;
enum colorType { RED, BLUE, GREEN } color;

void validateCasting() {
    ( int32_t ) 3U;       /*  Compliant */
    ( bool ) false;       /*  Compliant - 'false' from stdbool.h is essentially Boolean */
    ( bool ) 0;           /*  Compliant - by exception */
    ( bool ) 3U;          /* Noncompliant */

    ( int32_t ) vehicle;  /*  Compliant */
    ( enum vehicleType ) 3; /* Noncompliant */
    ( char ) color;       /*  Compliant */
}

チェック情報

グループ: 実質的な型モデル
カテゴリ: 推奨
AGC カテゴリ: 推奨

バージョン履歴

R2024a で導入

すべて展開する


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.