Function not called

Функция определяется, но не вызывается

Описание

Эта проверка определения функции определяет, вызывается ли функция где угодно в коде. Эта проверка отключена, если ваш код не содержит main функция.

Используйте эту проверку, чтобы удовлетворить ISO® 26262 требования о покрытии функций. Для примера смотрите таблицу 15 ISO 26262, часть 6.

Примечание

Эта проверка по умолчанию не включена. Чтобы включить эту проверку, необходимо задать соответствующую опцию анализа. Для получения дополнительной информации смотрите Detect uncalled functions (-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 определяется, но не вызывается. Поэтому в определении Function not called появляется серая проверка 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ошибка Function not called серого цвета появляется в определении 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