Variable shadowing

Переменная скрывает другую переменную с таким же именем с вложенной возможностями

Описание

Этот дефект возникает, когда переменная скрывает другую переменную с таким же именем во внешних возможностях.

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

Риск

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

Зафиксировать

Исправление зависит от первопричины дефекта. Например, предположим, что вы рефактируете функцию, такую что вы используете локальную статическую переменную вместо глобальной переменной. В этом случае глобальная переменная является избыточной, и можно удалить ее объявление. Кроме того, если вы не уверены, используется ли глобальная переменная в другом месте, можно изменить имя локальной статической переменной и всех ссылок в функции.

Если затенение предназначено и вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другого рассмотрения. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

Примеры

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

#include <stdio.h>

int fact[5]={1,2,6,24,120};

int factorial(int n)
 {
  int fact=1; 
  /*Defect: Local variable hides global array with same name */

  for(int i=1;i<=n;i++)
    fact*=i;

  return(fact);
 }

Внутри factorial function, целочисленная переменная fact скрывает глобальный целочисленный массив fact.

Коррекция - Изменение имени переменной

Одной из возможных коррекций является изменение имени одной из переменных, предпочтительно той, которая имеет более локальные возможности.

#include <stdio.h>

int fact[5]={1,2,6,24,120};

int factorial(int n)
 {
  /* Fix: Change name of local variable */
  int f=1; 

  for(int i=1;i<=n;i++)
    f*=i;

  return(f);
 }

Информация о результатах

Группа: Поток данных
Язык: C | C++
По умолчанию: On для рукописного кода, off для сгенерированного кода
Синтаксис командной строки: VAR_SHADOWING
Влияние: Низкое
Введенный в R2013b