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