﻿# V2616\. MISRA\. All conditional inclusion preprocessor directives should reside in the same file as the conditional inclusion directive to which they are related\.

This diagnostic rule is based on the [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) manual for software development\.

Conditional compilation directives '\#else', '\#elif' and '\#endif' must be in the same file as the '\#if', '\#ifdef' or '\#ifndef' to which they refer\. Non\-compliance with this rule makes code more difficult to read\. Besides, this increases the probability of a mistake when you edit and maintain code\.

Note: it is impossible to make this error in modern compilers\. Incorrect use of conditional compilation directives in these compilers leads to compile\-time errors\.

Look at the example:

```cpp
#define Check_A 10

#ifdef Check_A        // <=
#if Check_A > 5
static int a = 5;
#elif Check_A > 2
static int a = 2;
#else
static int a = 0;
#endif                // <=

int main(void)
{
  return a;
}
```

In the first example a nested condition that consists of '\#ifdef' and '\#if' is used\. At the end of the fragment the second conditional compilation directive \('\#if'\) is closed, but '\#ifdef' remains open\. This can create incorrect code\.

Look at another example:

```cpp
/* File.h */
#ifdef Check_B
#include "SomeOtherFile.h"    // <=
/* End of File.h */
```

In this example the conditional compilation directive is not closed\. If you include this file in others using the '\#include' preprocessor directive, this can lead to subtle errors\.