メインコンテンツ

MISRA C:2023 Rule 11.7

A cast shall not be performed between pointer to object and a non-integer arithmetic type

R2024a 以降

説明

ルール定義

A cast shall not be performed between pointer to object and a non-integer arithmetic type 1 .

根拠

このルールは実質的な boolean 型、文字型、enum 型、浮動小数点型を対象としています。

  • 実質的な boolean 型、文字型、enum 型の変数がポインターにキャストされると、結果のポインターは正しく配置されない可能性があります。不適切なアライメントは未定義の動作を発生させます。ポインターがこれらの型のいずれかにキャストされると、結果の値はその型に許可された範囲から外れる可能性があります。

  • 浮動小数点型を指すポインターからのキャスト、あるいは浮動小数点型を指すポインターへのキャストは未定義の動作になります。

トラブルシューティング

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

すべて展開する


        int foo(void) {

    short *p;
    float  f;
    long  *l;

    f = (float)   p;              /* Non-compliant */
    p = (short *) f;              /* Non-compliant */

    l = (long *)  p;              /* Compliant */
}

この例では、次の場合にこのルールに違反します。

  • ポインター pfloat にキャストされる。

  • float 変数が short へのポインターにキャストされる。

ポインターと非整数の変数の間でキャストすると、コンパイル エラーが発生する可能性があります。Polyspace® は、このようなキャストにフラグを設定します。

ポインター plong* にキャストされる場合、ルールに違反しません。

チェック情報

グループ: Pointer Type Conversions
カテゴリ: 必要
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.