다음을 통해 공유


경고 C28196

요구 사항이 충족되지 않았습니다. (식이 true로 평가되지 않습니다.)

이 경고는 __notnull__null__drv_valueIs 분석 중인 함수에 매개 변수 또는 반환 값에 대한 _Out_ 주석 또는 유사한 주석이 있지만 반환된 값이 해당 주석과 일치하지 않음을 나타냅니다.

설명

같은 __notnull 주석은 매개 변수 및 반환 값에 대한 _Out_ 고정을 설명합니다. 이 값은 설명서와 함수 작성자의 정신 검사 역할을 합니다. 경고 C28196은 주석과 함수의 실제 동작이 일치하지 않음을 나타냅니다. 이 경고는 함수가 특정 입력 값에 대해 예기치 않게 동작할 수 있는 경우를 검색하는 데 유용할 수 있습니다. 그런 다음 작성자가 함수의 의도된 동작을 결정하고 주석 또는 구현을 적절하게 조정해야 합니다.

예제

다음 함수는 일부 코드 경로가 null 포인터를 반환하더라도 주석이 _Ret_notnull_ 추가되기 때문에 경고 C28196을 발생합니다.

#include <sal.h>

_Ret_notnull_
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

이 문제를 해결하려면 주석을 구체화하여 함수의 동작을 정확하게 반영합니다.

#include <sal.h>

_When_(index < len, _Ret_notnull_)
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

참고 항목

함수 매개 변수에 주석을 추가하고 값을 반환합니다.
주석 적용 시기 및 위치 지정\