2017-07-08 2 views
0

J'essaie d'analyser les fonctions en utilisant clang libtooling. Voici le code source que je veux analyser:Comment exculde build-in/fonction du système lors de l'analyse de la fonction par clang libtooling

#include <stdio.h> 

int main(){ 
    int a = 100; 
    printf("a==%d", a); 
} 

quand je lance mon outil pour obtenir toutes les fonctions décl dans les fichiers ci-dessus, je trouve qu'il ya beaucoup de construction dans/fonctions du système, comme:

decls: 
_IO_cookie_init 
__underflow 
__uflow 
__overflow 
_IO_getc 
_IO_putc 
_IO_feof 
_IO_ferror 
_IO_peekc_locked 
_IO_flockfile 
_IO_funlockfile 
_IO_ftrylockfile 
_IO_vfscanf 
_IO_vfprintf 
_IO_padn 
_IO_sgetn 
_IO_seekoff 
_IO_seekpos 
_IO_free_backup_area 
remove 
rename 
renameat 
tmpfile 
tmpfile64 
tmpnam 
tmpnam_r 
tempnam 
fclose 
fflush 
fflush_unlocked 
fcloseall 
fopen 

(je pense qu'ils sont introduits par le fichier d'en-tête « stdio.h »)

ma question est: Comment puis-je me débarrasser de tous ces intégrés/fonctions du système de la « stdio fichier .h "ou d'autres fichiers d'en-tête (système)?

Merci d'avance !!!

+0

Votre outil recherche-t-il des fonctions définies ou des fonctions qui viennent d'être déclarées et non définies? – deLta

+0

@deLta Merci d'avoir répondu. Actuellement, je cherche juste les decls des fonctions créées par les programmeurs eux-mêmes. – ignorer

+0

@deLta BTW, la méthode d'obtention de la fonction définie et celle de la fonction déclarée et non définie sont différentes? Je suis curieux à ce sujet. Serait-il possible d'expliquer un peu à ce sujet? Merci :) – ignorer

Répondre

2

Lorsque vous visitez une fonction, vérifiez si son emplacement (startLoc ou endLoc) est en tête du système en utilisant SourceManagers api 'isInSystemHeader (loc)'

par exemple:

Bool VisitFunctionDecl(FunctionDecl * D) 
{ 
    If(sourceManager.isInSystemHeader(D->getLocStart())) 
     return true; 
} 

Merci, Hemant

+0

Merci! Ça marche! – ignorer