Поделиться через


C28193

Предупреждение C28193: Переменная содержит значение, требующее проверки

Это предупреждение означает, что вызывающая функция не проверяет значение заданной переменной, которая была передана функцией.Возвращаемое значение с меткой _Check_return_ , но вызывающая функция или не использует значение или перезапишет его значение без проверки.

Это предупреждение подобно предупреждению C6031, но сообщение о нем появляется только если в коде не проверяется и не учитывается значение переменной, например при использовании ее в сравнении.Простое присвоение значения не является достаточным изменением для избежания этого предупреждения.Задание псевдонима результата функции считается достаточным изменением, но результат должен быть объявлен с меткой _Check_return_.

Некоторые функции (например, strlen) существуют практически исключительно для их возвращаемого значения, поэтому для них есть смысл содержать метку _Check_return_.Для этих функций инструмент анализа кода может отображать это предупреждение, если возвращаемое значение не используется.Обычно это означает, что код неверен, например, он может содержать устаревший код, который может быть удален.Однако в некоторых редких случаях возвращаемое значение намеренно не используется.Самым распространенным из этих случаев является случай, где длина строки возвращается, но фактически не используется до проверки другого условия.Еще один тест приводит смоделированному случаю, где длина строки в конечном итоге не используется.Если это происходит, код может быть верен, но может оказаться неэффективным.

2 основных стратегии в этих случаями, когда возвращаемое значение не используется.

Изменение кода для того, чтобы длина строки возвращалась только в случаях, где она требуется.

Используйте #pragma предупреждение, чтобы отключить предупреждение, если после изменения кода, он станет слишком сложным или, в противном случае, менее полезным.

Пример

Это предупреждение появляется в следующем примере кода:

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
...

В следующем примере кода показано, как избежать появления данного предупреждения:

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
...
if (nMapRegs < MIN_REQUIRED_MAPS) {
...
}