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
Метрика HIS: да