exponenta event banner

Функция недоступна

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

Описание

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

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

  • Код следует за 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 только ветвь, есть серый Функция не достижимая проверка на определение 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 вызывается после красного деления по ошибке Zero. Следовательно, существует серая проверка функции, недоступная для определения 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. Поэтому существует серая ошибка функции, недоступная для определения checkRatio. Поскольку checkUpperBound и checkLowerBound вызываются только из checkRatio, также существует серая проверка функции, недоступная для их определений.

#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, в их определениях появится серый флажок Функция недостижима.

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

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