Ca me gonfle grave (pardonnez l'expression, mais elle dit ça si bien) d'avoir le code d'un "module" qui forme un tout logique concrètement réparti entre deux fichiers. Déjà, conceptuellement, ça ne veut rien dire pour moi (*). Ensuite, en pratique, des infos fondamentales relatives à ce que j'écris là maintenant ne se trouvent pas dans ce fichier-ci mais ailleurs. Donc, je passe mon temps à jongler d'une vue à une autre (heureusement qu'on a inventé les onglets, sinon ce serait pire...
). Et ce ne sont pas des infos sur des modules tiers que j'utiliserais, mais les données de base de ce module-ci (par ex, l'ordre des champs de tel type de struct, ou le type exact de tel param de telle fonction) !
Pour limiter les dégâts, je décris tout en double:
* Les #défine sont litéralement copiés-collés, puisque le compilo accepte ça (et d'ailleurs ça permet d'éviter des erreurs d'incohérence). Ca concerne à la fois les pseudo-constantes et les pseudo-fonctions.
* Les définitions de types sont copiées dans un commentaire (rigolez pas).
* Les constantes sont déclarées extern dans le .h et donc en fait définies dans le .c, là où j'en ai besoin. Je pense à mettre la valeur en commentaire dans le .h.
* Les fonctions n'ont évidemment qu'un prototype dans le .h, là tout va bien.
* Toute la doc est copiée-collée.
Le problème, c'est la maintenance de tout ça : si je change ne serait-ce que la doc, il me faut (penser à) copier les modifs dans le .h.
Comment vous vous débrouillez, vous ?
Merci,
Denis
(*) S'il s'agit de limiter la visibilité des éléments pour du code applicatif, pourquoi ne pas avoir plutôt un attribut de déclaration qui dit ça? Mais en fait la raison concrète est plutôt, sans doute, la compilation séparée, qui impose de déclarer à part pour que la compil puisse connaître ce qui existe.
Partager