Function not reachable

Функция вызвана от недостижимой части кода

Описание

Эта проверка появляется на функциональном определении. Проверка кажется серой, если функция вызвана только от недостижимой части кода. Недостижимый код может произойти одним из следующих способов:

  • Код достигнут через условие, которое является всегда ложным.

  • Код следует за break или return оператор.

  • Код следует за красной проверкой.

Если ваш код не содержит main функция, эта проверка отключена

Примечание

Эта проверка не включена по умолчанию. Чтобы включить эту проверку, необходимо задать соответствующую опцию анализа. Для получения дополнительной информации смотрите Detect uncalled functions (-uncalled-function-checks).

Примеры

развернуть все

#include<stdio.h>
#define SIZE 100

void increase(int* arr, int index);

void printError()
{
  printf("Array index exceeds array size.");
}

void main() {
  int arr[SIZE],i;
  for(i=0; i<SIZE; i++)
    arr[i]=0;

  for(i=0; i<SIZE; i++) {
    if(i<SIZE)
      increase(arr,i);
    else
      printError();
  }
}

В этом примере, во втором for цикл в maini всегда меньше SIZE. Поэтому else ветвь условия if(i<SIZE) никогда не достигается. Поскольку функциональный printError называется от else одна только ветвь, существует серый Function not reachable, проверяют определение printError.

#include<stdio.h>

int getNum(void);

void printSuccess()
{
  printf("The operation is complete.");
}

void main() {
  int num=getNum(), den=0;
  printf("The ratio is %.2f", num/den);
  printSuccess();
}

В этом примере, функциональном printSucess называется после красной ошибки Division by Zero. Поэтому существует серый Function not reachable, проверяют определение printSuccess.

#include<stdio.h>
#define MAX 1000
#define MIN 0

int getNum(void);

void checkUpperBound(double ratio) 
{
    if(ratio < MAX)
        printf("The ratio is within bounds.");
}

void checkLowerBound(double ratio) 
{
    if(ratio > MIN)
        printf("The ratio is within bounds.");
}

void checkRatio(double ratio) 
{
    checkUpperBound(ratio);
    checkLowerBound(ratio);
}

void main() {
    int num=getNum(), den=0;
    double ratio;
    ratio=num/den;
    checkRatio(ratio);
}

В этом примере, функциональном checkRatio следует за красной ошибкой Division by Zero. Поэтому существует серая ошибка Function not reachable на определении checkRatio. Поскольку checkUpperBound и checkLowerBound называются только от checkRatio, существует также серый Function not reachable, проверяют их определения.

#include<stdio.h>

int getNum(void);
int getChoice(void);

int num, den, choice;
double ratio;

void display(void) 
{
    printf("Numerator = %d, Denominator = %d", num, den);
}

void display2(void) 
{
    printf("Ratio = %.2f",ratio);
}


void main() {
    void (*fptr)(void);

    choice = getChoice();
    if(choice == 0)
        fptr = &display;
    else
        fptr = &display2;

    num = getNum();
    den = 0;
    ratio = num/den;

    (*fptr)();
}

В этом примере, в зависимости от значения choice, указатель функции fptr может указать на любой display или к display2. Вызов через fptr следует за красной ошибкой Division by Zero. Поскольку display и display2 называются только через fptr, серая проверка Function not reachable появляется на их определениях.

Проверяйте информацию

Группа: Поток данных
Язык: C | C++
Акроним: FNR