J'ai une collection de code C hérité que je suis en train de refactoriser pour séparer le code de calcul C de l'interface graphique. Ceci est compliqué par le code de noyau mathématique fortement récursif étant K & déclarations de style R. J'ai déjà abandonné une tentative de les convertir en déclarations ANSI en raison de l'utilisation imbriquée des paramètres de la fonction (ne pouvait pas obtenir ces 4 dernières erreurs de compilation).Fusion de C Callergraph avec Doxygen ou détermination de l'union de tous les appels
J'ai besoin de déplacer certains fichiers dans une pure DLL et de déterminer l'interface minimale à rendre public, ce qui va nécessiter l'écriture de fonctions wrapper pour publier une interface typée.
J'ai annoté les fichiers source clés avec le balisage Doxygen @callergraph afin que des graphiques informatifs soient générés pour les fonctions individuelles. Ce que je voudrais faire au-delà est de fusionner ces graphes pour pouvoir déterminer la limite la plus étroite des fonctions exposées au monde extérieur.
Les fichiers d'en-tête d'origine ne servent à rien - ils exposent tout comme des fonctions C non typées.
Il existe des centaines de fonctions, ce qui rend l'inspection des callergraphes générés très simple. J'envisage d'écrire une sorte d'outil de fusion DOT - définir DOT_CLEANUP = NO permet à Doxygen de laisser les fichiers DOT intermédiaires là plutôt que de simplement conserver les fichiers png qu'ils ont générés. Je ne suis pas obsédé par ce qui est une solution graphique - je serais très heureux si quelqu'un pouvait suggérer un outil d'analyse alternative (gratuit ou relativement bon marché) ou une technique utilisant la sortie XML de Doxygen pour atteindre le même objectif.
A callergraph amalgamé au niveau du fichier a un certain attrait pour la documentation client plutôt qu'une simple liste :-)
Pourriez-vous s'il vous plaît coller quelques exemples d'entrée (je crois savoir qu'il ya DOT et les formats XML)? –
Malheureusement, non sans l'approbation du client et je manque probablement de temps libre aux États-Unis dans environ 24 heures. J'ai résolu le problème d'une manière différente - le code algorithmique n'est plus publié en tant qu'interface. Au lieu de cela, la logique métier de l'interface graphique est déplacée dans la même DLL et le seul couplage externe est les commandes et les notifications de propriété, une préoccupation beaucoup plus étroite! –
Pourriez-vous ... coller des exemples anonymes? Le problème est intéressant comme "comment diviser un programme en deux d'une manière où la connexion est mince" –