extrair incluir no arquivo C

1

Eu preciso extrair todas as bibliotecas incluídas em um arquivo C, mas tenho alguns problemas. Minha solução para isso é:

grep -oP '#(?:\/\*\w*\*\/|)include(?:\/\*\w*\*\/|\s*)"\w*.h"|<\w*.h>' main.c

Esta regex pega a biblioteca quando está em comentário, por exemplo

/*#include <stdlib.h>*/

e eu não sei como fazer esse script me dá apenas o nome da biblioteca sem #include

Como consertar meu regex para funcionar corretamente?

UPD:

main.c

#include  "string.h"
#include <stdlib.h>
 #include "math.h"
    #include "stdint.h"
#/*comment*/include /*comment*/ <fenv.h>  
//#include <iostream>
#/**/include "something.h"
/* comment */#include "float.h"
/*#include "library.h"*/
int main() {

}

O que eu quero:

"string.h"
<stdlib.h>
"math.h"
"stdint.h"
<fenv.h>
"something.h"
"float.h"
    
por Shmuser 26.03.2017 / 16:19

1 resposta

6

Você deve pedir ao compilador (ou melhor, ao pré-processador C) para fazer o trabalho para você:

gcc -M main.c

Isso produzirá uma dependência no estilo Makefile com todos os cabeçalhos incluídos por main.c (incluindo os incluídos de forma transitiva). Ele manipulará corretamente comentários e outras diretivas de pré-processador ( #if , #ifdef e assim por diante).

    
por 26.03.2017 / 16:45

Tags