MISRA C:2012 Dir 4.4

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

Описание

Направляющее определение

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

Объяснение

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

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

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

Реализация Polyspace

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

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

  • Доксиджен комментирует начало с /**, /*!, /// или //!.

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

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

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

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

  • Комментарии, которые содержат один или несколько @ символ. Если @ символ помещается во вложенный комментарий, который содержит код, Polyspace® флаги это. Для instance:.

    int* q;
    //@Error int foo(void);
    //...
    void bar(void){
    	/*
    	int*p =  (int*) malloc(int); // Error @allocation
    	*/
    }
    В предыдущем коде Polyspace отмечает второй блок комментария, содержащий закомментированный malloc операция, и игнорирует первый комментарий.

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

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

Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.

Примеры

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

#include <stdlib.h>
/* =====================================
 * usage:print32_tInteger(); 
 * =====================================*/
int32_t getRandInt();
void print32_t(int32_t);

//Error@ int32_t val = getRandInt();
void print32_tInteger() {
    /* int32_t val = getRandInt(); //Noncompliant
     * val++;  // contact support @..
     * print32_t(val); */     
    print32_t(getRandInt());
}

Этот пример содержит несколько комментариев, который содержит код.

  • Первый блок комментария документирует использование функционального print32_tInteger(). Поскольку комментарий использует символ = больше чем пять раз Polyspace не отмечает этот комментарий.

  • Второй комментарий документирует источник ошибки в коде. Поскольку код содержит символ @, Polyspace игнорирует комментарий.

  • Третий блок комментария комментирует код, который может содержать ошибки. Этот комментарий ничего не документирует и просто исключает код из компиляции. Polyspace отмечает этот блок кода. Поскольку @ символ находится во вложенном комментарии, Polyspace не игнорирует комментарий.

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

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