• [^] # Re: Sécurité ?

    Posté par . En réponse à la dépêche Un nouveau serveur httpd : Ashd, A Sane HTTP Daemon. Évalué à 4.

    C'est vrai que j'ai tendance à plus faire du C++ que du C, et donc la pré-incrémentation a du sens.

    Ici on parlait du C, donc...
    De plus, même en C++ la post-incrémentation à du sens puisque une grosse partie ne concerne que les entiers sans operateurs surchargés, et donc reviens au même que pour le C.

    Ceci dit, le compilateur n'est pas contraint d'optimiser, et une variable temporaire peut donc être générée lors de la post-incrémentation pour récupérer le résultat de la post-incrémentation.

    Au contraire, le compilateur est contraint d'optimiser. Les dev du compilo ne vont bien sur pas mourir s'il n'optimise pas, mais c'est l'essence même du compilo d'optimiser.
    Grace au bon niveau d'optimisation des compilos actuels, il est maintenant possible pour beaucoup d'algo d'écrire un code lisible avec une sémantique claire et de laisser le compilo optimser le tout, là ou avant on était obliger d'optimiser à la main et d'obtenir un code dur à maintenir.

    Le fait d'utiliser une post-incrémentation dans un calcul est juste un moyen de faciliter la vie du compilo en lui indiquant que à cet endroit il y a moyen de faire deux calculs en même temps. Un jour, la réécriture de boucle aura suffisamment avancée pour que l'on puisse écrire de n'importe quelle manière, le compilo s'en apercevra tout seul et on pourra choisir l'option la plus lisible pour maintenir le code.

    L'incrémentation ne devrait pas être faire en même temps qu'une autre opération : le C ne garanti pas forcément un ordre d'exécution des instruction dans une même expression.

    Sauf que ton exemple n'est qu'un cas particulier ou en effet il ne faut pas le faire. Si tu prend l'exemple suivant :

    dst[pdst++] = src[psrc++];

    et que tu le met dans une boucle, utiliser la post-incrementation permet de faire l'affectation en même temps que les deux incrémentation, alors que la pre-incrémentation nécessiterait d'attendre que les deux incrémentation soient finie pour faire l'affectation.

    Donc non, la post-incrémentation est à proscrire sauf cas particuliers.

    Je maintien que non. La post-incrémentation n'est à proscrire que dans le cas très particulier ou tu fais du C++ avec des opérateur surchargés et donc sur des classes et pas des entiers et que tu utilise un mauvais compilateur.

    De manière générale elle est souvent meilleur ou equivalent à la pre-incrémentation, et sur un rapide sondage (qui ne veut pas dire grand chose...) des codeurs autour de moi, à peu près tout le monde la trouve plus lisible.