• [^] # Re: lecture oui, écriture non

    Posté par . En réponse au journal int *(*(*foo[])(int))(float*);. Évalué à 1. Dernière modification le 13 septembre 2014 à 23:48.

    Je trouve ce propos impertinent.

    Je suis d'accord qu'une simplification avec un outil d'abstraction approprié comme typedef améliore à la fois la lecture et l'écriture d'une telle déclaration.
    Néanmoins il est primordial pour un bon développeur en C de maîtriser parfaitement les arcanes du typage et de la déclaration propres à ce langage, aussi brouillons et inefficaces soient-ils.

    Savoir manipuler des notions abstraites comme les fonctions "d'ordre supérieur" (qui n'en sont pas vraiment en C, pas de first-class citizenship pour nos pauvres fonctions :( ) est nécessaire à une bonne organisation d'un code complexe.

    On ne peut pas juger de la qualité du code par la complexité de déclaration des typles employés. On a affaire ici à des objets relativement simples à manipuler, qui s'expriment beaucoup plus facilement dans un langage de plus haut niveau.

    On pourrait à la limite se permettre de critiquer le langage pour son inexpressivité (qui peut être contournée, cf: typedef), mais pas l'utilisateur.

    Étant assistant professeur en C et C++, je préfère largement voir une déclaration complexe sous cette forme de la part d'un de mes élèves, qu'une décomposition en types de données intermédiaires (et les actions associées pour dégager le niveau d'indirection induit) qui ajoutent un overhead. Ça montre que l'élève à compris le typage du langage et le maîtrise. À moi d'être alerte pour reconnaître rapidement le type utilisé.