Parser un fichier C et imprimer les fonctions externes [Script] - C - Programmation
Marsh Posté le 07-09-2007 à 16:30:59
peut-être que tu peux compiler ton fichier source, et regarder les symboles dans le fichier objet généré. Ca t'évite de parser la syntaxe toi-même
exemple sous linux:
> cat toto.c |
Dans ce cas, on voit que le source utilise trois symboles externes (foo, fwrite, stdout). Reste à faire la différence entre les fonctions et les variables, et à remonter à fprintf à partir de fwrite (d'ailleurs, je vois pas trop comment le fwrite se retrouve ici )
Marsh Posté le 07-09-2007 à 16:37:46
Ca semble effectivement une option sympathique. Je suppose que fwrite est une implementation de fprintf vu que printf est une fonction non standard par pas mal de cotes.
Merci au CEA de Saclay. Moi j'etais a l'inria de l'autre cote du plateau
Marsh Posté le 07-09-2007 à 16:48:36
fprintf est standard... A mon avis c'est juste le compilo qui optimise tout ça en appelant directement fwrite, vu que tu n'as pas de % dans ta chaine.
Marsh Posté le 07-09-2007 à 17:46:32
bien sur fprintf est dans le "standard". Je voulais juste dire que c'est une fonction "bizarre" vu qu'elle a un nombre d'arguments variables.
Marsh Posté le 08-09-2007 à 11:55:26
matafan a écrit : fprintf est standard... A mon avis c'est juste le compilo qui optimise tout ça en appelant directement fwrite, vu que tu n'as pas de % dans ta chaine. |
Ouais, ça ressemble effectivement bien à une optimisation de compilo, mais comment gcc peut-il faire des optimisations de ce genre alors qu'il n'a pas encore eu le définition de la fonction fprintf ? Lorsque tu fais ton 'gcc -c', a priori gcc ne connait que le header 'stdio.h', dans lequel on lui donne la signature de fprintf. Pour se rendre compte qu'en fait seul un fwrite est nécessaire, il faudrait en plus connaitre le code de la fonction fprintf. Je pense qu'il y a un truc qui m'échappe, mais je sais pas quoi
Marsh Posté le 10-09-2007 à 10:06:36
Le truc c'est que quelque part dans gcc, il y a du code spécial qui se charge de transformer les printf/fprintf en write/fwrite quand c'est possible. gcc ne devine pas tout seul qu'il peut optimiser ces fonction ; on (les développeurs de gcc) lui a appris à le faire.
Marsh Posté le 10-09-2007 à 12:20:22
matafan a écrit : Le truc c'est que quelque part dans gcc, il y a du code spécial qui se charge de transformer les printf/fprintf en write/fwrite quand c'est possible. gcc ne devine pas tout seul qu'il peut optimiser ces fonction ; on (les développeurs de gcc) lui a appris à le faire. |
OK, donc c'est une optimisation très spécifique à printf, et "codée en dur"... Tout s'explique !
Quelque part, ça me rassure : je pensais que gcc était capable tout seul d'analyser le code de printf, de détecter que dans certains cas on ne faisait qu'appeler fwrite, et d'en générer les optiisations qui vont bien.
merci pour l'explication
Marsh Posté le 06-09-2007 à 17:58:32
Salut a tous,
Mon but est de parser le fichier blah.c automatiquement et de sortir toutes les fonctions externes qui sont utilisees par blah.c
Evidemment l'utilitaire utilise doit etre scriptable donc que personne ne me suggere de cliquer sur un bouton "generer la documentation" de tel IDE
genre voila blah.c
int main(){
youhou(blah());
}
et le resultat doit etre quelque chose comme:
youhou
blah
Merci,