Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2583. MISRA. Line whose first token is '#' should be a valid preprocessing directive.

26 Апр 2021

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

Директивы препроцессора (строки начинающиеся с '#') могут использоваться для условного включения или исключения кода из компиляции. Некорректно написанные препроцессорные директивы могут привести к некорректному включению или исключению кода, которое заранее не предполагалось. Поэтому все директивы предварительной обработки должны быть синтаксически корректны.

Рассмотрим пример:

// #define CIRCLE
#define SQUARE

float processArea(float x)
{
#ifdef CIRCLE
  return 3.14 * x * x;
#elf defined(SQUARE)
  return x * x;
#else1
  return 0;
#endif
}

Здесь неправильно написаны директивы препроцессора '#elif' и '#else', что приведет к исключению всего кода из тела функции. Корректный вариант:

// #define CIRCLE
#define SQUARE

float processArea(float x)
{
#ifdef CIRCLE
  return 3.14 * x * x;
#elif defined(SQUARE)
  return x * x;
#else
  return 0;
#endif
}

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

  • MISRA-C-2012-Rule-20.13
  • MISRA-C-2023-Rule-20.13
  • MISRA-CPP-2023-Rule-19.0.1

Ты поймал бага за сек!
А мы в коде ловим их за доли секунды. Хочешь проверить?

Попробовать бесплатно