主要内容

未调用函数

函数已定义但未调用

描述

对函数定义的此检查用于确定是否在代码中的任何位置调用了该函数。如果您的代码未包含 main 函数,则系统会禁用此检查。

使用此检查可满足有关函数覆盖率的 ISO® 26262 要求。例如,请参阅 ISO 26262 第 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 的定义中会显示一个灰色的未调用函数检查结果。

更正:调用函数

一种可能的更正方法是调用 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 的定义中会显示灰色的未调用函数错误。

更正:调用函数

一种可能的更正方法是调用 reset 函数。在此示例中,函数调用 reset 的作用与 if(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