C26135

Warnung C26135: Die Anmerkung <Anmerkung> fehlt bei der Funktion <func>.

Warnung C26135 wird ausgegeben, wenn der Analyzer ableitet, dass eine Funktion eine Sperrenwrapperfunktion ist, der eine Sperre Versionsnebeneffekt abrufen oder sperren können.Wenn der Code nicht vorgesehen, dass eine Wrapperfunktion sein, entweder die Sperre Verhindern (Wenn die Sperre abgerufen wird), oder sie nicht ordnungsgemäß freigegeben wird (wenn die Sperre freigegeben ist).

Beispiel

Im folgenden Beispiel wird die Warnung C26135, da eine entsprechende Nebeneffektanmerkung 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 ein bedingter Sperrennebeneffekt erkannt wird.Um einen bedingten Auswirkungen Kommentieren, verwenden Sie die _When_(ConditionExpr, LockAnnotation) Anmerkung, in der LockAnnotation ist entweder _Acquires_lock_ oder _Releases_lock_ und ConditionExpr der Prädikatausdruck ein boolescher bedingter Ausdruck ist.Die Nebeneffekte anderer Anmerkungen auf der gleichen Funktion treten nur auf, wenn ConditionExpr ergibt, auf True gesetzt.Da ConditionExpr verwendet wird, um die Bedingung zurück zum Aufrufer weitergegeben, muss sie Variablen verwenden, die im aufrufenden Kontext erkannt werden.Diese schließen Funktionsparameter, globale oder Klassenmembervariablen oder der Rückgabewert ein.Um den Rückgabewert zu finden, verwenden Sie ein spezielles 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 die freigegebene/Exklusivsperren auch Lese-/Schreibsperren, können Sie Sperrennebeneffekte wiedergeben, indem Sie die folgenden Anmerkungen werden:

  • _Acquires_shared_lock_(LockExpr)

  • _Releases_shared_lock_(LockExpr)

  • _Acquires_exclusive_lock_(LockExpr)

  • _Releases_exclusive_lock_(LockExpr)