メインコンテンツ

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

CERT C: Rec.DCL22-C

Use volatile for data that cannot be cached

説明

ルール定義

キャッシュできないデータには volatile を使用します。1

Polyspace 実装

ルール チェッカーは、"読み取りのない書き込み" をチェックします。

すべて展開する

問題

読み取りのない書き込みは、変数に代入された値が読み取られない場合に発生します。

たとえば、変数に値を書き込んだ後、前の値を読み取る前に 2 番目の値を書き込みます。この最初の書き込み操作は冗長です。

リスク

冗長な書き込み操作は多くの場合、プログラミング エラーを示します。たとえば、2 つの連続した書き込み操作の間に変数を読み取るのを忘れていたり、意図せずに別の変数を読み取っていたりします。

修正方法

変数に書き込んだが、後にその変数を読み取っていない理由を特定します。名前が似ている別の変数を誤って読み取っているなど、一般的なプログラミング エラーを探します。

書き込み操作が冗長であると判断したら、その操作を削除します。

例 - 読み取りを進めずに書き込むエラー
void sensor_amplification(void)
{
    extern int getsensor(void);
    int level;

    level = 4 * getsensor();             //Noncompliant
    /* Defect: Useless write */
}

変数 level に値 4 * getsensor() が代入された後、この値は読み取られていません。

修正 — 代入後に値を使用

1 つの修正方法として、代入後に変数 level を使用することができます。

#include <stdio.h>

void sensor_amplification(void)
{
    extern int getsensor(void);
    int level;

    level = 4 * getsensor(); 
    
    /* Fix: Use level after assignment */
    printf("The value is %d", level);
    
}

変数 level は新しい値を読み取ったうえで出力されます。

チェック情報

グループ: Rec.02.宣言と初期化 (DCL)

バージョン履歴

R2019a で導入

すべて展開する


1 This software has been created by MathWorks incorporating portions of: the “SEI CERT-C Website,” © 2017 Carnegie Mellon University, the SEI CERT-C++ Web site © 2017 Carnegie Mellon University, ”SEI CERT C Coding Standard – Rules for Developing safe, Reliable and Secure systems – 2016 Edition,” © 2016 Carnegie Mellon University, and “SEI CERT C++ Coding Standard – Rules for Developing safe, Reliable and Secure systems in C++ – 2016 Edition” © 2016 Carnegie Mellon University, with special permission from its Software Engineering Institute.

ANY MATERIAL OF CARNEGIE MELLON UNIVERSITY AND/OR ITS SOFTWARE ENGINEERING INSTITUTE CONTAINED HEREIN IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.

This software and associated documentation has not been reviewed nor is it endorsed by Carnegie Mellon University or its Software Engineering Institute.