メインコンテンツ

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

呼び出されない関数

関数が定義済みですが呼び出されません。

説明

関数定義へのこのチェックは、関数がコードのどこかから呼び出されるかどうかを判定します。このチェックは、コードが main 関数を含まない場合には無効です。

このチェックを使用することで、関数カバレッジに関する ISO® 26262 要件を満たします。たとえば、ISO 26262, part 6 の表 15 を参照してください。

メモ

このチェックは既定ではオンに設定されません。このチェックをオンにするには、適切な解析オプションを指定しなければなりません。詳細は、呼び出されない関数の検出 (-uncalled-function-checks) を参照してください。

すべて展開する

#define max 100
int var;
int getValue(void);
int getSaturation(void);

void reset() {
    var=0;
}

void main() {
    int saturation = getSaturation(),val;
    for(int index=1; index<=max; index++) {
        val = getValue();
        if(val>0 && val<10)
            var += val;
        if(var > saturation)
            var=0;
    }
}

この例では、関数 reset は定義済みですが呼び出されません。したがって、グレーの[呼び出されていない関数] チェックが reset の定義上に表示されます。

修正: 関数の呼び出し

可能な修正の 1 つは、関数 reset を呼び出すことです。この例では、関数呼び出し reset は命令 var=0; と同じ目的を果たします。したがって、命令を関数呼び出しで置き換えます。

#define max 100

int var;
int getValue(void);
int getSaturation(void);

void reset() {
    var=0;
}

void main() {
    int saturation = getSaturation(),val;
    for(int index=1; index<=max; index++) {
        val = getValue();
        if(val>0 && val<10)
            var += val;
        if(var > saturation)
            reset();
    }
}

#define max 100

int var;
int numberOfResets;
int getValue();
int getSaturation();

void updateCounter() {
  numberOfResets++;
}

void reset() {
  updateCounter();
  var=0;
}

void main() {
  int saturation = getSaturation(),val;
  for(int index=1; index<=max; index++) {
    val = getValue();
    if(val>0 && val<10)
      var += val;
    if(var > saturation) {
      numberOfResets++;
      var=0;
    }
  }
}

この例では、関数 reset は定義済みですが呼び出されません。関数 updateCounter の呼び出し元が reset のみであるため、グレーの [呼び出されていない関数] エラーが updateCounter の定義上に表示されます。

修正: 関数の呼び出し

可能な修正の 1 つは、関数 reset を呼び出すことです。この例では、関数呼び出し resetif(var > saturation) の分岐の命令と同じ目的を果たします。したがって、命令を関数呼び出しで置き換えます。

#define max 100

int var;
int numberOfResets;
int getValue(void);
int getSaturation(void);

void updateCounter() {
  numberOfResets++;
}

void reset() {
  updateCounter();
  var=0;
}

void main() {
  int saturation = getSaturation(),val;
  for(int index=1; index<=max; index++) {
    val = getValue();
    if(val>0 && val<10)
      var += val;
    if(var > saturation)
      reset();
  }
}

チェック情報

グループ: データ フロー
言語: C | C++
頭字語: FNC