メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

呼び出された関数の数

関数本体内で呼び出される個別の関数の数

説明

このメトリクスは、関数の本体内で呼び出される個別の関数の数を示します。

このメトリクスには次のものが含まれます。

  • 到達不能コードでの呼び出し。

  • 標準ライブラリ関数の呼び出し。

  • ユーザー定義のコンストラクターとデストラクターの呼び出し。

このメトリクスは次のものを除外します。

  • 関数ポインターを介した呼び出し。

  • バーチャル関数の呼び出し。

  • assert の呼び出し。Polyspace®assert を関数ではなくマクロと見なします。

  • インラインされた関数。コンパイラは、既定または暗黙的なコンストラクターやデストラクターなど、特定の関数呼び出しをインライン化する可能性があります。

このメトリクスの推奨上限は 7 です。より自己完結型のコードでは、このメトリクスの上限を適用するようにしてください。

メトリクスに制限を適用するには、Polyspace を使用したコード複雑度メトリクスの計算を参照してください。コード メトリクス制限の違反を Bug Finder 欠陥として適用するには、ソフトウェア複雑度チェッカーを使用します。Polyspace チェッカーを使用してソフトウェアの複雑度を低減するを参照してください。

すべて展開する

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 内で呼び出された関数の数は 3 です。

  1. クラス A のコンストラクター。このユーザー定義コンストラクターは関数呼び出しとしてカウントされます。

  2. クラス B のコンストラクター。基底クラス A のコンストラクターはユーザー定義であるため、B::B()=default として宣言されていても、B のコンストラクターは関数呼び出しとしてカウントされます。

  3. 関数 func

クラス A は既定の、または暗黙的なコピー コンストラクターを使用しています。A obj2 = obj; 内でのコピー コンストラクターの呼び出しは、関数呼び出しとしてカウントされません。

メトリクス情報

グループ: 関数
頭字語: CALLS
HIS メトリクス:あり