exponenta event banner

Функция не вызвана

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

Описание

Эта проверка определения функции определяет, вызывается ли функция в любом месте кода. Эта проверка отключена, если код не содержит 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 определен, но не вызван. Поэтому в определении параметра Функция серого цвета не называется проверкой 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