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


Предупреждение C28193

Переменная содержит значение, которое необходимо проверить

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

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

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

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

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

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

Пример

Следующий пример кода вызывает появление этого предупреждения.

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

Следующий пример кода позволяет избежать появления этого предупреждения.

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