Данное диагностическое правило основано на руководстве 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 }
Данная диагностика классифицируется как:
|