>
>
>
V2521. MISRA. Only the first member of …


V2521. MISRA. Only the first member of enumerator list should be explicitly initialized, unless all members are explicitly initialized.

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Данное диагностическое правило актуально только для C++. Анализатор обнаружил совмещение явной и неявной инициализации элементов перечисления. Это может привести к неожиданному дублированию их значений.

Пример некорректного кода:

enum Suits 
{ 
  SUITS_SPADES = 1,
  SUITS_CLUBS,
  SUITS_DIAMONDS,  
  SUITS_HEARTS,
  SUITS_UNKNOWN = 4 
};

Подобная инициализация привела к тому, что элементы 'SUITS_HEARTS' и 'SUITS_UNKNOWN' имеют одинаковые значения. Может быть неочевидно, сделано это специально, или код содержит ошибку.

Анализатор не будет выдавать предупреждение, если:

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

Данная диагностика классифицируется как:

  • MISRA-CPP-8.5.3