メインコンテンツ

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

呼び出し元関数の数

関数に対する個別の呼び出し元の数

説明

このメトリクスは関数の個別の呼び出し元の数を測定します。

C++ では、Polyspace® はバーチャル関数およびコンパイラ生成の陰関数 (既定のコンストラクターおよびデストラクターなど) に対してこのメトリクスを計算しません。ユーザー定義のコンストラクターおよびデストラクターに対しては、このメトリクスが計算されます。クラス階層において、基底クラスがユーザー定義のコンストラクターを使用している場合、Polyspace は派生クラスの対応するコンストラクターに対してこのメトリクスをカウントします。

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

メトリクスに制限を適用するには、Polyspace を使用したコード複雑度メトリクスの計算を参照してください。

計算の詳細

以下のメトリクスの特徴に注意してください。

  • 直接の呼び出し元しか考慮されません。

  • 関数ポインターを介した呼び出しは考慮されません。

  • 到達不能コード内の呼び出しも含め、すべての関数呼び出しが考慮されます。

    ただし、呼び出し元が 1 つの関数を複数回呼び出しても、このメトリクスの計算の際には 1 回しかカウントされません。

すべて展開する

#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 に対する呼び出し元関数の数は 2 です。A::Aobj を作成するために 1 回呼び出され、objB を作成するために再度呼び出されます。同様に、B:: に対する呼び出し元関数の数は 1 です。

  • A::barB::bar はどちらもバーチャル関数であるため、Polyspace はこれらの呼び出し元関数の数を計算しません。

  • func に対する呼び出し元関数の数は 1 です。

メトリクス情報

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