Number of Calling Functions

Количество отличных вызывающих сторон функции

Описание

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

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

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

Осуществлять пределы на метриках:

Детали расчета

Обратите внимание на то, что метрика:

  • Учитывает прямые вызывающие стороны только.

  • Не рассматривает вызовы через указатель функции.

  • Учитывает все вызовы функции, включая единицы в недостижимом коде.

    Однако, если вызывающая сторона вызывает функцию несколько раз, вызывающая сторона считается только однажды, когда эта метрика вычисляется.

Примеры

развернуть все

#include <stdio.h>


    int getVal() {
    int myVal;
    printf("Enter a value:");
    scanf("%d", &myVal);
    return myVal;
}

int func() {
    int val=getVal();
    if(val<0)
        return 0;
    else
        return val;
}

int func2() {
    int val=getVal();
    while(val<0)
        val=getVal();
    return val;
}

В этом примере, количестве вызывания функций для getVal 2. Функциями вызова является func и func2.

#include <stdio.h>




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

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

В этом примере, количестве вызывания функций для fibonacci 2. Функциями вызова является main и 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;
}

В этом примере:

  • Количество вызывания функций для A::A два. A::A называется однажды, чтобы создать obj и снова создать objB. Точно так же количество вызывания функции для B:: тот.

  • Поскольку оба A::bar и B::bar виртуальные функции, Polyspace не вычисляет их количество вызывания функций.

  • Количество вызывания функции для func тот.

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

Группа: Функция
Акроним: CALLING
Метрика HIS: да