Freigeben über


C26135

Warnung C26135: fehlende Anmerkung <annotation> Bei der Funktion <func>.

Warnung C26135 ausgegeben wird, wenn der Analyzer leitet, dass eine Funktion eine Lock-Wrapperfunktion, die mit eine Sperre ist erwerben oder Release Nebeneffekt sperren.Wenn der Code keine Wrapperfunktion vorgesehen ist, hat entweder die Sperre ist undicht (Wenn die Sperre eingerichtet ist) oder es wird freigegeben falsch (Wenn die Sperre freigegeben wird).

Beispiel

Im folgende Beispiel wird Warnung C26135 generiert, da eine entsprechende Nebenwirkung Anmerkung fehlt.

    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);
    }

Warnung C26135 wird auch ausgegeben, wenn eine bedingte Sperre Nebenwirkung erkannt wird.Um einen bedingten Effekt versehen möchten, verwenden Sie die _When_(ConditionExpr, LockAnnotation) Anmerkung, wo LockAnnotation ist entweder _Acquires_lock_ oder _Releases_lock_ und der Prädikatausdruck ConditionExpr ist ein boolescher Ausdruck für bedingter.Die Nebenwirkungen der anderen Anmerkungen auf die gleiche Funktion nur auftreten, wenn ConditionExpr True ergibt.Da ConditionExpr wird verwendet, um das Weiterleiten der Zustand an den Aufrufer zurückzusenden, Projekt sind Variablen, die im Kontext Aufrufs erkannt werden.Dazu gehören globale Funktionsparameter oder Class-Member-Variablen oder den Rückgabewert.Auf der Rückkehr Wert, verwenden eine spezielle Schlüsselwort in der Anmerkung return, wie im folgenden Beispiel gezeigt.

    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;
    }

Für shared/exklusive Sperren, auch bekannt als Leser/Schreiber-Sperren, können Sie sperren Nebenwirkungen Ausdrücken, mithilfe der folgenden Anmerkungen:

  • _Acquires_shared_lock_(LockExpr)

  • _Releases_shared_lock_(LockExpr)

  • _Acquires_exclusive_lock_(LockExpr)

  • _Releases_exclusive_lock_(LockExpr)