Pergunta

Eu quero fazer isso:

extract_prototypes file1.c file2.cpp file3.c

e faça com que qualquer script/programa imprima uma boa lista de protótipos de funções para todas as funções definidas nos arquivos C/C++ fornecidos.Ele deve lidar bem com declarações multilinhas.

Existe um programa que pode fazer esse trabalho? Quanto mais simples, melhor.

EDITAR:depois de tentar compilar dois programas C, pontos extras para algo que usa {perl, python, ruby}.

Foi útil?

Solução

A ferramenta cproto Faz o que você deseja e permite ajustar a saída aos seus requisitos.

Observação: Esta ferramenta também funciona apenas para arquivos C.

Outras dicas

eu uso ctags

# p = function declaration, f = function definition
ctags -x --c-kinds=fp /usr/include/hal/libhal.h

Também funciona com C ++

ctags -x --c++-kinds=pf --language-force=c++ /usr/include/c++/4.4.1/bits/deque.tcc

Observe que você pode precisar adicionar caminhos, fazer isso usando o -I /path/to/includes.

http://cfunctions.sourceforge.net

(Isso só C e um subconjunto limitado de C ++. Isenção de responsabilidade: este é o meu programa.)

Eu costumava usar doxygen para gerar documentação para o meu código C ++. Não sou especialista, mas acho que você pode usar doxygen para gerar algum tipo de arquivo de índice dos protótipos de função.

Aqui está um fio de alguém fazendo uma pergunta semelhante

gccxml é interessante, mas imprime uma árvore XML. Você precisa extrair informações sobre classe, funções, tipos e até mesmo os modelos especializados de classe e funções. gccxml Use o analisador do GCC, para que você não precise fazer o pior trabalho que está analisando o arquivo C ++, e você tem 100% de certeza de que é o que provavelmente o melhor compilador entende.

Se você formatar seus comentários adequadamente, você pode tentar Doxygen. De fato, se você não tentou antes de recomendar uma chance de qualquer maneira - ele produzirá gráficos de herança, bem como listas e descrições de funções de membro completo (a partir de seus comentários).

gcc-xml Pode ajudar, embora, como seja, ele só faz metade do trabalho que você deseja. Você precisará de algum processamento da saída XML

Você pode executar o arquivo fonte através deste programa:

/* cproto_parser.c */
#include <stdio.h>                           
int main (void)                              
{                                            
    int c;                                   
    int infundef = 0;                        
    int nb = 0,                              
        np = 0;                              
    while((c=getc(stdin))!=EOF){             
        if(c=='{'){                          
            if((np==0)&&(nb==0)){infundef=1;}
            nb++;                            
        }                                    
        if (infundef==0) {putc(c,stdout);}   
        if(c=='}'){                          
            if((np==0)&&(nb==1)){infundef=0;}
            nb--;                            
        }                                    
        if(c=='('){np++;}                    
        if(c==')'){np--;}                    
    }                                        
    return 0;                                
}                    

Execute o pré-processador para se livrar dos comentários.Se você tiver chaves incompatíveis devido a #ifdefs você terá que definir definições, incluir arquivos para que isso não aconteça.

por exemplo., cc cproto_parser.c -o cproto_parser; cc -E your_source_file.c|./cproto_parser

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top