Анализатор обнаружил в коде на языке C определение типа функции с использованием квалификаторов const
или volatile
. Согласно пункту 10 параграфа 6.7.4.1 стандарта С23, при использовании таких типов поведение не определено.
Пример кода, на котором анализатор сгенерирует предупреждения:
typedef int fun_t(void); typedef const fun_t const_qual_fun_t; // V1117 typedef const fun_t * ptr_to_const_qual_fun_t; // V1117 void foo() { const fun_t c_fun_t; // V1117 const fun_t * ptr_c_fun_t; // V1117 }
Для правильной работы программы следует убрать квалификатор const
при определении типа функции. Таким образом, корректный код выглядит так:
typedef int fun_t(void); typedef fun_t const_qual_fun_t; // ok typedef fun_t * ptr_to_const_qual_fun_t; // ok void foo() { fun_t c_fun_t; // ok fun_t * ptr_c_fun_t; // ok }