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 цикл в main, i всегда меньше 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