MISRA C:2012 Dir 4.4

Разделы кода не должны быть «закомментированы»

Описание

Определение директивы

Разделы кода не должны быть «закомментированы».

Объяснение

Комментарии C, заключенные в /* */ не поддерживает вложенность. Комментарий, начинающийся с /* заканчивается на первом */ даже когда */ предназначен как конец более позднего вложенного комментария. Если раздел кода, который закомментирован, уже содержит комментарии, можно столкнуться с ошибками компиляции (или хотя бы закомментировать код меньше, чем вы намереваетесь).

Комментирование кода не является хорошей практикой. Закомментированный код может оставаться вне синхронизации с окружающим кодом, не вызывая ошибок компиляции. Позже, если вы раскомментируете код, то можете столкнуться с неожиданными проблемами.

Используйте комментарии только для объяснения аспектов кода, которые не очевидны из самого кода.

Реализация Polyspace

Чекер использует внутреннюю эвристику, чтобы обнаружить закомментированный код. Для образца такие символы, как #, ;, { или } указать комментарии, которые потенциально могут содержать код. Эти комментарии затем оцениваются по другим метрикам, чтобы определить вероятность маскировки кода как комментария. Для образца несколько последовательных слов без символа между ними уменьшают эту вероятность.

Шашка не помечает следующие комментарии, даже если они содержат код:

  • Комментарии Doxygen, начинающиеся с /**, /*!, /// или //!.

  • Комментарии, которые повторяют один и тот же символ несколько раз, например, символ = здесь:

    /* =====================================
     * A comment
     * =====================================*/

  • Комментарии к первой линии файла.

  • Комментарии, которые смешивают стиль C (/* */) и стиль C++ (//).

Чекер считает, что эти комментарии предназначены для целей документации или были внесены преднамеренно с некоторой дальновидностью.

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

#include <stdlib.h>

int32_t getRandInt();
void print32_t(int32_t);

/* Function to print32_t random int32_tegers*/ 
void print32_tInteger() {
    /* int32_t val = getRandInt(); 
     * val++; 
     * print32_t(val); */     
    print32_t(getRandInt());
}

Этот пример содержит блок закомментированного кода, который нарушает правило.

Проверяйте информацию

Группа: Кодовые проекты
Категория: Консультационные
Категория СМЖЛ: Консультационная
Введенный в R2020b