主要内容

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

被调函数数量

函数体内调用的不同函数的数量

描述

该度量指定函数在其函数体内调用的不同函数的数量。

该度量包括:

  • 在无法访问的代码中调用。

  • 调用标准库函数。

  • 调用用户定义的构造函数和析构函数。

该度量不包括:

  • 通过函数指针调用。

  • 调用虚拟函数。

  • 调用 assert。Polyspace®assert 视为宏,而不是函数。

  • 内联函数。编译器可能会内联某些函数调用,例如默认或隐式构造函数和析构函数。

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

要对度量强制应用某些限制,请参阅使用 Polyspace 计算代码复杂度度量。要将违反代码度量限制作为 Bug Finder 缺陷强制执行,请使用软件复杂度检查项。请参阅Reduce Software Complexity by Using Polyspace Checkers

示例

全部展开

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

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

在此示例中,foo 中调用的函数数量为 2。被调用的函数是 func1func2

#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 中调用的函数数量为 3:

  1. A 的构造函数。此用户定义的构造函数算作一个函数调用。

  2. B 的构造函数。由于基类 A 的构造函数是由用户定义的,因此即使 B::B() 被声明为 =defaultB 的构造函数仍被视为函数调用。

  3. 函数 func

A 使用默认的或隐式构造函数。在 A obj2 = obj; 中调用复制构造函数不算作函数调用。

度量信息

:函数
缩写CALLS
HIS 度量:是