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

Имя определения типа должно быть уникальным идентификатором

Описание

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

Имя определения типа должно быть уникальным идентификатором.

Объяснение

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

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

XX конфликтов с определением типа называют YY.

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

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

Примеры

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

void func ( void ){
  {
    typedef unsigned char u8_t;
  }
  {
    typedef unsigned char u8_t; /* Non-compliant */
  }
}

typedef float mass;
void func1 ( void ){
  float mass = 0.0f;            /* Non-compliant */
}

В этом примере имя typedef u8_t используется дважды. Имя typedef mass также используется в качестве имени идентификатора.

typedef struct list{          /* Compliant - exception */				
  struct list *next;
  unsigned short element;
} list;												

typedef struct{
  struct chain{               /* Non-compliant */	
    struct chain *list2;
    unsigned short element;
  } s1;
  unsigned short length;
} chain;

В этом примере имя typedef list совпадает с настоящим именем типа struct. Правило позволяет этот исключительный случай.

Однако имя typedef chain не является тем же самым как настоящим именем типа struct. Имя chain сопоставлено с различным типом struct. Поэтому это сталкивается с именем typedef.

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

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

Введенный в R2014b