Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
584 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Script]Parser un fichier C et imprimer les fonctions externes

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Script]Parser un fichier C et imprimer les fonctions externes

n°1609004
Cytoplasm
Posté le 06-09-2007 à 17:58:32  profilanswer
 

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,

mood
Publicité
Posté le 06-09-2007 à 17:58:32  profilanswer
 

n°1609249
Dumbledore
Posté le 07-09-2007 à 11:43:47  profilanswer
 

à coup de awk ?

n°1609251
Cytoplasm
Posté le 07-09-2007 à 11:45:51  profilanswer
 

Heu, ca me semble serieusement chaud avec awk!

n°1609396
franceso
Posté le 07-09-2007 à 16:30:59  profilanswer
 

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
#include <stdio.h>
 
int foo (void);
 
int main ()
{
  fprintf (stdout, "Hello World\n" );
 
  return foo ();
}
> gcc -c toto.c
> nm toto.o
         U foo
         U fwrite
00000000 T main
         U stdout


 
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 :??:)


---------------
TriScale innov
n°1609401
Cytoplasm
Posté le 07-09-2007 à 16:37:46  profilanswer
 

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 ;)

n°1609442
matafan
Posté le 07-09-2007 à 16:48:36  profilanswer
 

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.

n°1609518
Cytoplasm
Posté le 07-09-2007 à 17:46:32  profilanswer
 

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.

n°1609666
franceso
Posté le 08-09-2007 à 11:55:26  profilanswer
 

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 :??:


---------------
TriScale innov
n°1609938
matafan
Posté le 10-09-2007 à 10:06:36  profilanswer
 

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.

n°1610013
franceso
Posté le 10-09-2007 à 12:20:22  profilanswer
 

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 :jap:


---------------
TriScale innov
mood
Publicité
Posté le 10-09-2007 à 12:20:22  profilanswer
 

n°1610222
ffomnislas​h
Posté le 10-09-2007 à 20:18:24  profilanswer
 

dans tous les cas tu ne fait que appeler fwrite.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Script]Parser un fichier C et imprimer les fonctions externes

 

Sujets relatifs
recherche dans un fichierEcrire un fichier wav avec fmod ex
Importer dans Access 2007 un MCD de PowerAMC en fichier requêtes SQLProblème lors de la compression d'un fichier...
Formulaire upload fichier = mauvais dossier [resolu]integrer un fichier d'aide dans un projet
Erreur dans script de migration[Batch] [resolu] Copier le premier fichier de chaque sous repertoire
piloter un fichier excel intégré dans un fichier word[Batch] Lancement d'une appli sans bloquer le deroulement de script
Plus de sujets relatifs à : [Script]Parser un fichier C et imprimer les fonctions externes


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR