次の方法で共有


C26135

C26135 警告: 不足しているアノテーション <annotation> 関数 <func> では。

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)