• [^] # Re: Le cas goto

    Posté par (site web personnel) . En réponse au journal Apple, le SSL les goto et les accolades. Évalué à 3.

    Perso, je n'ai quasiment jammais utilsié les exceptions en C++.
    Mais si je devais, le code ressemblerais plus à ça:

    /* Check that everything is Ok, and throw in case of error */
    static void SSLVerifySignedServerKeyExchange(/* ... */) {
    {
     std::vector<...> signedHashes = ...;
     std::unique_ptr<...> hashCtx = ...;
     //...
     SSLHashSHA1.update(hashCtx, serverRandom));
     SSLHashSHA1.update(hashCtx, signedParams));
     SSLHashSHA1.final(hashCtx, hashOut));
    }

    Le problème des exceptions c'est que c'est que ça a un coût (en terme de taille du binaire par example). Pas mal de projets sont compilé avec -fno-rtti.

    Sans exception le C++ ressemble à ça:

    static OSStatus SSLVerifySignedServerKeyExchange(/* ... */) {
     std::vector<...> signedHashes = ...;
     std::unique_ptr<...> hashCtx = ...;
     OSStatus err;
     if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) 
     return err;
     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
     return err;
     if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
     return err;
     return OSStatus::Success:
     // no cleaning necessary
    }