Aracılığıyla paylaş


C26135

C26135 Uyarı: eksik ek açıklama <annotation> fonksiyonu <func>.

Analyzer kilit bulundurduğu kilit sarıcı işlevine bir işlev olarak yorumlar, C26135 verilen uyarı Al veya yayın yan etkisi kilitleyin.Kod sarıcı işlevine tasarlanmamıştır, sonra (kilit alınmakta varsa) kilit sızıntı veya (kilit yayımlanan varsa) yanlış çıkarılmıştır.

Örnek

Aşağıdaki örnek, uygun yan etkisi ölçümde eksik olduğundan uyarı C26135 oluşturur.

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

Koşullu bir kilitleme yan etkisi algılandığında uyarı C26135 de verilir.Koşullu bir efekt eklemek için _When_(ConditionExpr, LockAnnotation) ek açıklama, burada LockAnnotation ya da _Acquires_lock_ veya _Releases_lock_ ve doðrulama deyimi ConditionExpr Boolean bir koşullu ifade.Sadece aynı işlevi diğer açıklamaları, yan etkileri ortaya, ConditionExpr true deðerini verir.Çünkü ConditionExpr geçiş için koşul çağırana geri çağıran içeriğinde tanınan değişkenlerin kapsaması gerekir kullanılır.Bunlar, fonksiyon parametreleri, genel veya sınıf üyesi değişkenleri veya dönüş değeri içerir.Dönüş değeri, ek açıklama, özel anahtar sözcüğünü kullanın görmek için return, aşağıdaki örnekte gösterildiği gibi.

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

Paylaşılan/özel kilitler, Okuyucu/Yazıcı kilit olarak da bilinir, kilitleme yan etkileri aşağıdaki açıklamaları kullanarak ifade edebilirsiniz:

  • _Acquires_shared_lock_(LockExpr)

  • _Releases_shared_lock_(LockExpr)

  • _Acquires_exclusive_lock_(LockExpr)

  • _Releases_exclusive_lock_(LockExpr)