Количество циклов графика вызовов для одной или нескольких функций
Метрика предоставляет количественную оценку количества циклов рекурсии в вашем проекте. Метрика является суммой:
Количество прямых рекурсий (самокурсивные функции или функции, вызывающие себя).
Количество сильно связанных компонентов, образованных циклами косвенной рекурсии в вашем проекте. Если вы рассматриваете циклы рекурсии как ориентированный граф, график сильно связан, если существует путь между всеми парами вершин.
Чтобы вычислить количество сильно связанных компонентов:
Нарисуйте циклы рекурсии в коде.
Например, циклы рекурсии в этом примере показаны ниже.
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®:: Правило 16.2 2004 года, MISRA C++:2008 Rule 7-5-4 или JSF® Правило 119. Обратите внимание, что:
Шашки правил сообщают о каждой функции, которая вызывает себя, прямо или косвенно. Даже если несколько функций участвуют в одном цикле рекурсии, каждая функция сообщается индивидуально.
Проверки правил рассматривают только явные вызовы функций. Для образца, в Коды С++, проверяющие правила игнорируют неявные вызовы конструкторов во время создания объекта. Однако при расчете метрики рассматриваются как неявные, так и явные вызовы.
Для обеспечения пределов на метрики смотрите Compute Code Complexity Metrics.
| Группа: Проект |
Акроним: AP_CG_CYCLE |
| ЕГО Метрика: Да |