• # C'est quoi defer ?

    Posté par . En réponse au lien defer en C avec gcc et clang. Évalué à 2.

    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
    }