メインコンテンツ

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

MISRA C++:2008 Rule 5-0-3

A cvalue expression shall not be implicitly converted to a different underlying type.

説明

ルール定義

A cvalue expression shall not be implicitly converted to a different underlying type. 1

根拠

このルールにより、式が別の型に変換されたとき、式の結果がオーバーフローしないようにします。

Polyspace 実装

このチェッカーによってフラグが設定される式は、MISRA™ C++ ドキュメンテーションの cvalue 式の詳細仕様に従います。

cvalue 式の基となるデータ型は、この式にあるオペランドのデータ型のうち範囲が最も広いものです。たとえば、2 つの変数を加算する場合、一方の変数が int8_t 型 (chartypedef) で、もう一方の変数が int32_t 型 (inttypedef) であれば、この加算の潜在型は int32_t です。合計を int8_t 型の変数に代入すると、ルールに違反します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include<cstdint>

void func ( )
  {
    int32_t s32;
    int8_t s8;
    s32 = s8 + s8; //Noncompliant
    s32 = s32 + s8; //Compliant
  }

この例では、int8_t 型の 2 つの変数が加算され、その結果が int32_t 型の変数に代入されるときにルールに違反します。加算の潜在型は、それに伴う整数プロモーションが考慮されず、単純にオペランドの範囲が最も広いデータ型になります。この場合は int8_t です。

いずれかのオペランドが int32_t 型で、結果が int32_t 型の変数に代入される場合、このルールに違反しません。この場合、加算の基となるデータ型は、結果が代入される変数の型と同じです。

チェック情報

グループ: Expressions
カテゴリ: 必要

バージョン履歴

R2013b で導入


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.