# V2627. MISRA. Function type should not be type qualified.

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

Это правило актуально только для C.

Анализатор обнаружил в коде объявление типа функции с использованием квалификаторов `const`, `volatile`, `restrict` или `_Atomic`. При использовании такого типа поведение программы не определено.

Примечание. Правило проверяет именно декларируемый тип функции, а не возвращаемый тип функции.

Пример кода, на котором анализатор сгенерирует предупреждения:

    typedef int fun_t(void);

    typedef const fun_t qual_fun_t;          // <=

    typedef const fun_t * ptr_to_qual_fun_t; // <=

    void foo()
    {
      const fun_t c_fun_t;                   // <=
      const fun_t * ptr_c_fun_t;             // <=
    }

Для правильной работы программы следует убрать квалификатор `const` при определении типа функции. Таким образом, корректный код выглядит так:

    typedef int fun_t(void);

    typedef fun_t qual_fun_t;          // ok

    typedef fun_t * ptr_to_qual_fun_t; // ok

    void foo()
    {
      fun_t c_fun_t;                    // ok
      fun_t * ptr_c_fun_t;              // ok
    }

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

MISRA-C-2023-17.13