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

This diagnostic rule is based on the software development guidelines developed by MISRA (Motor Industry Software Reliability Association).

This diagnostic rule is only relevant to C. Preprocessor directives (lines starting with'#') can be used to conditionally include or exclude code from compilation. Incorrectly written preprocessor directives can lead to incorrect inclusion or exclusion of code while such code changes were not intended. Therefore, all preprocessing directives must be syntactically correct.

Consider an example:

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

The '#elif' and '#else' preprocessor directives are misspelled here. This will exclude all code from the function body. Correct version:

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

This diagnostic is classified as:

MISRA-C-2012-20.13 MISRA-C-2023-20.13