主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

主调函数数量

函数的唯一调用者数量

描述

该度量衡量一个函数的独特调用者数量。

在 C++ 中,Polyspace® 不计算虚拟函数和编译器生成的隐式函数(如默认构造函数和析构函数)的度量。该度量值是针对用户定义的构造函数和析构函数计算的。在类层次结构中,如果基类具有用户定义的构造函数,Polyspace 会为派生类的相应构造函数计算此度量。

此度量的建议上限为 5。为了获得更独立的代码,请尝试对此度量设置上限。

要对度量强制应用某些限制,请参阅使用 Polyspace 计算代码复杂度度量

计算详细信息

请注意度量:

  • 只考虑直接调用者。

  • 不考虑通过函数指针的调用。

  • 考虑所有函数调用,包括不可达代码中的函数调用。

    但是,如果调用者调用函数多次,则在计算此度量时,调用者只被计数一次。

示例

全部展开

#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。调用函数为 funcfunc2

#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。调用函数为 mainfibonacci 本身。

                #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:: 的调用函数数为 1。

  • 由于 A::barB::bar 都是虚拟函数,因此 Polyspace 不计算它们的调用函数数。

  • func 的调用函数数量为 1。

度量信息

:函数
缩写CALLING
HIS 度量:是