﻿# V1071\. Return value is not always used\. Consider inspecting the 'foo' function\.

Анализатор обнаружил, что возвращаемое значение функции игнорируется\. При этом в большинстве случаев результат функции каким\-либо образом используется\.

Диагностика призвана помочь в тех случаях, когда функция или ее возвращающий тип не помечены стандартным атрибутом '\[\[nodiscard\]\]' \([C23](https://en.cppreference.com/w/c/language/attributes/nodiscard)/[C\+\+17](https://en.cppreference.com/w/cpp/language/attributes/nodiscard)\) или его аналогами\. Если в большинстве случаев результат функции использовался каким\-либо способом, и при этом в определенных ситуациях игнорируется, то это может свидетельствовать о возможной ошибке\.

Рассмотрим синтетический пример:

```cpp
int foo();
....
auto res = foo();
....
if (foo() == 42) { .... }
....
while (foo() != 42) { .... }
....
return foo();
....
foo();
....
```

Здесь результат функции 'foo' используется четырьмя различными способами, а затем игнорируется в одном\. Если результат не используется менее чем в 10% случаев от общего количества вызовов, анализатор выдаст предупреждение\.

В некоторых ситуациях такой код мог быть написан намеренно\. Например, если функция содержит некоторые побочные эффекты \- операции с потоком, чтение/запись 'volatile'\-переменных и т\.п\., и при этом результатом можно пренебречь\.

Чтобы помочь программисту понять, что такое поведение было задумано, рекомендуется явно проигнорировать возвращаемое значение, приведя его к типу 'void':

```cpp
....
(void) foo(); // or static_cast<void>(foo());
....
```

Анализатор не выдает срабатывания для следующих случаев:

* конструкторов;
* перегруженных операторов\.