This diagnostic rule is based on the MISRA (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:
#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:
/* 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.
This diagnostic is classified as:
|