MISRA 2012 Правило 17.3 гласит, что функция никогда не должна объявляться неявно. Однако в этом случае в строке № 6 pf_func нарушает правило MISRA 2012 17.3.
typedef unsigned long long uint64;
typedef void (*FOREACH_FUNC)(uint64 ull_key);
void main(FOREACH_FUNC pf_func)
{
uint64 var;
pf_func(var); /*Violation reported on this line*/
}
Здесь pf_func вызывает нарушение правила 17.3 MISRA. Это нарушение действительно или это ошибка в инструменте статического анализа, который я использую. Кроме того, есть ли альтернативное решение, чтобы избежать этого нарушения без изменения рабочего процесса кода?
Однако, когда я изменяю код на это -
typedef unsigned long long uint64;
typedef void (*FOREACH_FUNC)(uint64 ull_key);
FOREACH_FUNC pf_func(uint64 ull_key);
void main()
{
uint64 var;
pf_func(var);
}
для правила № 17.3 нарушения не зарегистрировано. Я не могу понять работу указателя функции здесь. Это правильный или этический способ решить эту проблему? Или есть неисправность в самом инструменте статического анализа?