Количество циклов графика вызовов в одной или нескольких функциях
В метрике представлена количественная оценка количества циклов рекурсии в проекте. Метрика представляет собой сумму:
Количество прямых рекурсий (саморекурсивных функций или функций, вызывающих себя).
Количество сильно связанных компонентов, сформированных в результате непрямых циклов рекурсии в проекте. Если считать циклы рекурсии направленным графом, граф будет сильно связан, если есть путь между всеми парами вершин.
Для вычисления количества сильно связанных компонентов:
Нарисуйте циклы рекурсии в коде.
Например, циклы рекурсии в этом примере показаны ниже.
volatile int checkStatus;
void func1() {
if(checkStatus) {
func2();
}
else {
func3();
}
}
func2() {
func1();
}
func3() {
func1();
}![]()

![]()
Определите количество сильно связанных компонентов, сформированных циклами рекурсии.
В предыдущем примере имеется один сильно связанный компонент. Можно перейти от любой вершины к другой вершине, следуя путям на графике.
В списке событий под метрикой показан один из циклов рекурсии в сильно связанном компоненте.
![]()

![]()
Вызовы через указатель функции не рассматриваются.
Рекомендуемый верхний предел для этой метрики равен 0. Чтобы избежать возможности превышения доступного пространства стека, не используйте рекурсии в коде. Рекурсии могут иметь тенденцию к легкому исчерпанию пространства стека. См. примеры увеличения размера стека с помощью рекурсий, описанных для этого правила CERT-C, запрещающего рекурсии.
Для выявления использования рекурсий проверьте наличие нарушений одной из MISRA C:2012 Rule 17.2, MISRA C ®: 2004 Правило 16.2,MISRA C++:2008 Rule 7-5-4 или JSF ® Rule 119. Обратите внимание, что :
Проверки правил сообщают о каждой функции, которая вызывает себя, прямо или косвенно. Даже если в одном цикле рекурсии задействовано несколько функций, каждая функция сообщается отдельно.
Средства проверки правил рассматривают только явные вызовы функций. Например, в коде C++ средства проверки правил игнорируют неявные вызовы конструкторов во время создания объекта. Однако при вычислении метрик учитываются как неявные, так и явные вызовы.
Сведения о наложении ограничений на метрики см. в разделе Метрики сложности вычислительного кода.
| Группа: Проект |
Акроним: AP_CG_CYCLE |
| ЕГО метрика: Да |