Partager via


C26135

avertissement C26135 : Annotation manquante <annotation> à la fonction <fonct>.

C26135 avertissement est émis lorsque l'analyseur déduit qu'une fonction est une fonction wrapper qui a un effet secondaire d'acquisition ou de libération de verrou.Si le code n'est pas conçu pour être une fonction wrapper, alors soit le verrou fuit (si le verrou est acquis) ou est libéré correctement (si le verrou est libéré).

Exemple

L'exemple suivant génère l'avertissement C26135 car une annotation d'effets secondaires appropriée est manquante.

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

L'avertissement C26135 est également émis lorsqu'un effet secondaire d'un verrouillage conditionnel est détecté.Pour annoter un effet conditionnel, utilisez l'annotation _When_(ConditionExpr, LockAnnotation) , où LockAnnotation est soit _Acquires_lock_ ou _Releases_lock_ et l'expression de prédicat ConditionExpr est une expression conditionnelle booléenne.Les effets secondaires d'autres annotations dans la même fonction se produisent uniquement lorsque ConditionExpr renvoie vrai.Étant donné que ConditionExpr est utilisé pour relayer la condition à l'appelant, elle doit impliquer les variables qui sont reconnues dans le contexte appelant.Celles-ci incluent des paramètres de fonction, des variables globales ou de membre de classe, ou la valeur de retour.Pour afficher la valeur de retour, utiliser un mot clé supplémentaire dand l'annotation, return, comme montré dans l'exemple suivant.

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

Pour des verrous partagés/exclusifs, également connu sous le nom verrous de lecture/écriture vous pouvez exprimer les effets secondaires du verrouillage à l'aide des annotations suivantes :

  • _Acquires_shared_lock_(LockExpr)

  • _Releases_shared_lock_(LockExpr)

  • _Acquires_exclusive_lock_(LockExpr)

  • _Releases_exclusive_lock_(LockExpr)