CERT C: Rec. DCL22-C

Используйте энергозависимый для данных, которые не могут кэшироваться

Описание

Управляйте определением

Используйте энергозависимый для данных, которые не могут быть cached.[1]

Реализация Polyspace

Это средство проверки проверяет на Запись без дальнейшего чтения.

Примеры

развернуть все

Проблема

Запись без дальнейшего чтения происходит, когда значение, присвоенное переменной, никогда не читается.

Например, вы пишете значение в переменную и затем пишете второе значение прежде, чем считать предыдущее значение. Первая операция записи избыточна.

Риск

Избыточные операции записи часто указывают на программные ошибки. Например, вы забыли читать переменную между двумя последовательными операциями записи или непреднамеренно читать различную переменную.

Фиксация

Идентифицируйте причину, почему вы пишете в переменную, но не читаете ее позже. Ищите общие программные ошибки, такие как случайное чтение различной переменной с аналогичным именем.

Если вы решаете, что операция записи избыточна, удалите операцию.

Пример - пишет без далее ошибки чтения
void sensor_amplification(void)
{
    extern int getsensor(void);
    int level;

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

После переменной level присвоен значение 4 * getsensor(), это не читается.

Коррекция — значение использования после присвоения

Одна возможная коррекция должна использовать переменную 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]  Это программное обеспечение было создано MathWorks, включающим фрагменты: “Веб-сайт SEI CERT-C”, © 2017 Carnegie Mellon University, веб-сайт SEI CERT-C © 2017 Carnegie Mellon University”, CERT SEI C Кодирование Стандарта – Правил для Разработки безопасных, Надежных и Защищенных систем – 2 016 Выпусков”, © 2016 Carnegie Mellon University, and “CERT SEI Стандарт Кодирования C++ – Правил для Разработки безопасных, Надежных и Защищенных систем на C++ – 2 016 Выпусков” © 2016 Carnegie Mellon University, со специальным разрешением от его Института программной инженерии.

ЛЮБОЙ МАТЕРИАЛ УНИВЕРСИТЕТА КАРНЕГИ-МЕЛЛОН И/ИЛИ ЕГО ИНСТИТУТА ПРОГРАММНОЙ ИНЖЕНЕРИИ СОДЕРЖАЛ, ЗДЕСЬ ПРЕДОСТАВЛЯЕТСЯ НА БАЗИСЕ "ASIS". УНИВЕРСИТЕТ КАРНЕГИ-МЕЛЛОН НЕ ДАЕТ ГАРАНТИЙ НИКАКОГО ВИДА, ИЛИ ОПИСАЛ ИЛИ ПОДРАЗУМЕВАЛ, ОТНОСИТЕЛЬНО ЛЮБОГО ВОПРОСА ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИЛ, ГАРАНТИЯ ПРИГОДНОСТИ ДЛЯ ЦЕЛИ ИЛИ ВЫСОКОГО СПРОСА, ИСКЛЮЧИТЕЛЬНОСТИ, ИЛИ ЗАКАНЧИВАЕТСЯ ПОЛУЧЕННЫЙ ИЗ ИСПОЛЬЗОВАНИЯ МАТЕРИАЛА. УНИВЕРСИТЕТ КАРНЕГИ-МЕЛЛОН НЕ ДАЕТ ГАРАНТИИ НИКАКОГО ВИДА ОТНОСИТЕЛЬНО СВОБОДЫ ОТ ПАТЕНТА, ТОВАРНОГО ЗНАКА ИЛИ НАРУШЕНИЯ АВТОРСКОГО ПРАВА.

Это программное обеспечение и сопоставленная документация не были рассмотрены, ни являются подтвержденным Университетом Карнеги-Меллон или его Институтом программной инженерии.