다음을 통해 공유


경고 C28193

변수가 검사해야 하는 값을 포함합니다.

이 경고는 호출 함수가 함수에서 제공한 지정된 변수의 값을 검사 않음을 나타냅니다. 반환된 값은 주석으로 _Check_return_ 주석을 추가하지만 호출 함수는 값을 사용하지 않거나 값을 검사하지 않고 덮어씁니다.

이 경고는 경고 C6031과 유사하지만 코드가 변수 값을 테스트하거나 검사하지 않는 경우에만 보고됩니다(예: 비교에 사용). 단순히 값을 할당하는 것은 이 경고를 피하기에 충분한 검사로 간주되지 않습니다. 함수에서 결과를 별칭 지정하는 것은 충분한 검사로 간주되지만 결과 자체에 주석을 추가 _Check_return_해야 합니다.

특정 함수(예: strlen)는 반환 값에 대해 거의 독점적으로 존재하므로 주석을 사용하는 _Check_return_ 것이 좋습니다. 이러한 함수의 경우 반환 값이 사용되지 않을 때 코드 분석 도구에서 이 경고를 보고할 수 있습니다. 이 경고는 일반적으로 코드가 올바르지 않음을 나타냅니다. 예를 들어 삭제할 수 있는 잔차 코드가 포함될 수 있습니다. 그러나 일부 드문 경우에서는 반환 값이 의도적으로 사용되지 않습니다. 이러한 인스턴스 중 가장 일반적인 경우는 문자열 길이가 반환되지만 다른 테스트가 이루어지기 전에는 실제로 사용되지 않는 경우입니다. 다른 테스트로 인해 문자열 길이가 사용되지 않는 경로가 시뮬레이션됩니다. 이 경우 코드가 올바르지만 비효율적일 수 있습니다.

반환 값이 사용되지 않는 경우를 처리하기 위한 두 가지 주요 전략이 있습니다.

문자열 길이가 필요한 경로를 따라만 반환되도록 코드의 순서를 다시 지정합니다.

#pragma 경고를 사용하여 경고를 표시하지 않습니다. 코드를 다시 정렬하면 코드가 너무 복잡하거나 유용하지 않습니다.

예시

다음 코드 예제에서는 이 경고를 생성합니다.

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

다음 코드 예제에서는 이 경고를 방지합니다.

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