Share via


C26135

경고 C26135: 함수 <func>에 누락된 주석 <annotation>.

분석기 잠금이 잠금 래퍼 함수 임을 유추하면 C26135 발생 경고 취득 또는 릴리스 부작용을 잠글 수도 있습니다.코드 래퍼 함수를 사용할 수 없는 경우 잠금 (잠금 획득 중인)은 누수되거나 (잠금을 해제하는 경우).올바르게 출시되지 않습니다.

예제

다음 예제에서는 주석이 적절 한 부작용이 없기 때문에 C26135 경고를 생성 합니다.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs;
    } DATA;

    void MyEnter(DATA* p) 
    {
        // Warning C26135:
        // Missing side effect annotation _Acquires_lock_(&p->cs)
        EnterCriticalSection(&p->cs);
    }

    void MyLeave(DATA* p) 
    {
        // warning C26135:
        // Missing side effect annotation _Releases_lock_(&p->cs)
        LeaveCriticalSection(&p->cs);
    }

조건부 잠금 의도를 발견하는 경우에 경고 C26135가 발급 됩니다.효과 조건부 주석에서 _When_(ConditionExpr, LockAnnotation) 주석을 LockAnnotation 이 _Acquires_lock_ 또는 _Releases_lock_ 이고 조건자 식 ConditionExpr 이 조건부 식인 곳에 사용합니다.다른 주석의 부작용은 같은 기능에서 ConditionExpr 가 true로 평가할 때 발생합니다.ConditionExpr 가 호출자에게 조건을 릴레이하기 때문에 호출 컨텍스트에서 인식되는 변수를 포함해야 합니다.함수 매개 변수, 전역 클래스 멤버 변수 또는 반환 값은 포함됩니다.반환 값을 보려면 다음 예제에서와 같이, return 주석에서 특별한 키워드를 사용합니다.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs; 
        int state;
   } DATA;

    _When_(return != 0, _Acquires_lock_(p->cs))
    int TryEnter(DATA* p) 
    {
        if (p->state != 0) 
        {
            EnterCriticalSection(&p->cs);
            return p->state;
        }

        return 0;
    }

판독기/기록기 잠금과 같이 공유/단독 잠금에 대해 다음과 같은 주석을 사용하여 잠금 부작용을 표현할 수 있습니다.

  • _Acquires_shared_lock_(LockExpr)

  • _Releases_shared_lock_(LockExpr)

  • _Acquires_exclusive_lock_(LockExpr)

  • _Releases_exclusive_lock_(LockExpr)