メインコンテンツ

MISRA C:2012 Rule 13.6

The operand of the sizeof operator shall not contain any expression which has potential side effects

説明

ルール定義

The operand of the sizeof operator shall not contain any expression which has potential side effects 1 .

根拠

sizeof 演算子の引数は通常、実行時には評価されません。引数が式である場合、式が評価されると誤認識する可能性があります。

Polyspace 実装

MISRA C™:2012 仕様に従い、sizeof 演算子のオペランドが sizeof 式の後も持続する二次的影響を及ぼす場合、ルール チェッカーは違反を報告します。たとえば、sizeof 演算子がグローバル変数をインクリメントする場合、ルール チェッカーは違反を報告します。

トラブルシューティング

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

すべて展開する

#include <stddef.h>
int x;
int y[40];
struct S {
    int a;
    int b;
};
struct S myStruct;

void main() {
    size_t sizeOfType;
    sizeOfType = sizeof(x);         /* Compliant */
    sizeOfType = sizeof(y);         /* Compliant */
    sizeOfType = sizeof(myStruct);  /* Compliant */
    sizeOfType = sizeof(x++);       /* Non-compliant */
}

この例では、式 x++sizeof 演算子の引数として使用される場合、ルールに違反します。

チェック情報

グループ: 二次的影響
カテゴリ: 必要
AGC カテゴリ: 必要

バージョン履歴

R2014b で導入

すべて展開する


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.