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

Диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

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

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

```cpp
// #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', что приведет к [исключению всего кода](https://godbolt.org/z/6816nh1Pr) из тела функции\. Корректный вариант:

```cpp
// #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
}
```