Number of Called Functions

Количество различных функций, вызываемых в теле функции

Описание

Эта метрика задает количество различных функций, которые вызываются функцией в ее теле.

Вызовы через указатель на функцию не учитываются. Подсчитываются вызовы в недоступном коде и вызовы стандартных библиотечных функций. assert рассматривается как макрос, а не как функция, поэтому не учитывается.

При вычислении этой метрики в коде С++, Polyspace® игнорирует неявные функции, которые генерирует компилятор, такие как конструкторы по умолчанию и деструкторы. Пользовательские конструкторы и деструкторы подсчитываются как вызовы функций. В иерархии классов, если базовый класс имеет определяемые пользователем конструкторы, Polyspace подсчитывает соответствующие конструкторы производных классов как функции.

Рекомендуемый верхний предел для этой метрики равен 7. Для получения более автономного кода попробуйте применить верхний предел для этой метрики.

Для обеспечения пределов на метрики:

Примеры

расширить все

int func1(void);
int func2(void);

int foo() {
    return (func1() + func1()*func1() + 2*func2());
}

В этом примере количество вызываемых функций в foo равен 2. Вызываемые функции func1 и func2.

#include <stdio.h>
int fibonacci(int);

void main() {
 int count;
 printf("How many numbers ?");
 scanf("%d",&count);
 fibonacci(count);
}

int fibonacci(int num)
{
   if ( num == 0 )
      return 0;
   else if ( num == 1 )
      return 1;
   else
      return ( fibonacci(num-1) + fibonacci(num-2) );
} 

В этом примере количество вызываемых функций в fibonacci равен 1. Вызываемая функция fibonacci сам.

            #include<iostream>
class A{
    public:
	A(){
		std::cout<<"Create A\n";
	}
	~A() = default;
	A(const A&)=default;
	A(A&&) = default;
	virtual void bar(){ std::cout<<"A";}
};
class B: public A{
    public:
	B() = default;
	 void bar() override {std::cout<<"B";}
};

void func(A& a){
	a.bar();
}

int main(){
	A obj;
	A obj2 = obj;
	B objB;
	func(obj);
	return 0;
}

В этом примере количество вызываемых функций в main Это три:

  1. Конструктор класса A. Этот определяемый пользователем конструктор учитывает как вызов функции.

  2. Конструктор класса B. Потому что конструктор базового класса A определен пользователем, конструктор B отсчитывает как вызов функции, хотя B::B() объявлен как =default.

  3. Функция func.

Класс A использует конструктор копирования по умолчанию или неявное копирование. Вызов конструктора копирования в A obj2 = obj; не учитывается как вызов функции.

Метрическая информация

Группа: Функция
Акроним: CALLS
ЕГО Метрика: Да