MISRA C++:2008 Rule 2-10-2

Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе

Описание

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

Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе.

Объяснение

Правило отмечает ситуации, где то же имя идентификатора используется в двух объявлениях переменной, один во внешнем осциллографе и другом во внутреннем осциллографе.

int var; 
...
{
...
  int var;
...
}

Все использование имени во внутреннем осциллографе относится к переменной, объявленной во внутреннем осциллографе. Однако разработчик или рецензент кода могут неправильно принять, что использование относится к переменной, объявленной во внешнем осциллографе.

Реализация Polyspace

Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам.

Средство проверки правила не отмечает ситуации, где то же имя идентификатора используется в различных логических осциллографах:

  • То же имя используется в элементе данных класса и переменной вне класса.

  • То же имя используется в методе в основе и производном классе.

Обменивайтесь сообщениями в отчете

Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе.

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

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

int varInit = 1;

void doSomething(void);

void step(void) {
    int varInit = 0; //Noncompliant
    if(varInit)
       doSomething(); 
}

В этом примере, varInit заданный в func скрывает глобальную переменную varInit. if условие относится к локальному varInit и блок недостижим, но вы можете ожидать в противном случае.

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

Группа: лексические соглашения
Категория: необходимый

Введенный в R2013b