• # C'est quoi defer ?

    Posté par  . Évalué à 2 (+0/-0).

    Du coup, j'ai regardé ce truc que je ne connaissais pas.
    defer c'est une nouvelle fonctionnalité pour le C qui vient d'être ajouté à GCC et Clang.
    Cela permet d'exécuter un bloc à la fin d'un bloc en logique FILO.
    Je vous remets l'exemple du blog ci-dessous.

    {                             // anchor block
        void* p = malloc(25);
        defer { free(p); };          // 1st defer
    
        mtx_lock(&mut);
        defer { mtx_unlock(&mut); }; // 2nd defer
    
        static uint64_t critical = 0;
        critical++;
        defer { critical--; };       // 3rd defer
    
        while (something) cnd_wait(&cond, &mut);
        ... use p under protection of mut ...
    }

    Équivalent à :

    {
        void* p = malloc(25);
    
        mtx_lock(&mut);
    
        static uint64_t critical = 0;
        critical++;
    
        while (something) cnd_wait(&cond, &mut);
        ... use p under protection of mut ...
    
    
        { critical--;       } // from 3rd defer
        { mtx_unlock(&mut); } // from 2nd defer
        { free(p);          } // from 1st defer
    }

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.