Правило 5.3 MISRA C:2012

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

Описание

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

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

Объяснение

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

Polyspace® рассматривает два имени как отличные, если существует различие между их первыми 63 символами. Если различие между двумя именами происходит только вне первых 63 символов, они могут быть легко приняты друг за друга. Удобочитаемость кода уменьшается. Для C90 различие должно произойти между первым 31 символом. Чтобы использовать проверку правил C90, используйте значение c90 для опции C standard version (-c-version).

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

Переменная XX скрывает переменную XX (СТОЛБЕЦ столбца СТРОКИ строки ФАЙЛА).

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

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

Примеры

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

typedef signed short int16_t;

void func( void )
{
    int16_t i;
    {
        int16_t i;				/* Non-compliant */
        i = 3;
    }
}

В этом примере идентификатор i, заданный во внутреннем блоке в func, скрывает идентификатор i с функциональным осциллографом.

Это не сразу понятно читателю, который i упомянут в операторе i=3.

typedef signed short int16_t;

struct astruct
{
    int16_t m;
};

extern void g ( struct astruct *p );
int16_t xyz = 0;

void func ( struct astruct xyz )  /* Non-compliant */
{
    g ( &xyz );
}

В этом примере параметр xyz функционального func скрывает глобальную переменную xyz.

Это не сразу понятно читателю, который xyz упомянут в операторе g (&xyz ).

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

Группа: Идентификаторы
Категория: необходимый
Категория AGC: консультация
Язык: C90, C99

Введенный в R2014b