número analisar o arquivo C ++ de argumentos
Pergunta
Eu tenho um pacote de c ++ arquivos com código fonte estática (já desenvolvida, não é necessário fazer nada para eles).
Existe um programa / lib / maneira de obter uma lista do número de parâmetros cada uma função withing desses arquivos?
Quer dizer, obtendo um resultado como:
#File a.cpp
##a() -> 3 paramss
##foo() -> 0 params (void)
#File b.cpp
##test() -> 1 param
....
E uma pergunta melhor.
Existe alguma maneira de também processar o número de retornos que tem?
#File a.cpp
##a() -> 3 params, 1 return
##foo() -> 0 params (void), 2 returns
Por exemplo, se "foo" tem um retorno se a condição for verdadeira e outro se false
Agradecemos antecipadamente.
Solução
Você poderia tentar correr Doxygen sobre os arquivos de origem.
Uma vez que o conteúdo é (presumivelmente) em situação irregular, você precisa configure doxygen para o conteúdo extrato de arquivos ilegais.
Se você quer apenas navegar por uma lista das funções disponíveis, você pode usar a saída HTML.
Você também pode configurar a saída Doxygen ser XML, e em seguida, escrever um analisador para as estatísticas de tração que você está procurando em cada função.
Outras dicas
Gostaria de contar o número de "", e começam em 1. Isso deve lhe dar uma contagem precisa do número de argumentos para uma função. Então eu iria verificar para ver se "vazio" existe antes o nome da função, se não, então você pode apostar que há um valor de retorno.
ifstream infile;
infile.open(...);
int i, ret, args;
String s;
ret = args = 0;
s = infile.getline();
for( i=0; s[i] != '('; i++ ) {
if( s[i] == 'v' && s[i+1] == 'o' && s[i+2] == 'i' && s[i+3] == 'd' ) {
ret = 1;
break;
}
}
for( i=0; s[i] != '('; i++ ) {}
for( i; s[i] != ')'; i++ ) {
if( args == 0 && s[i] != ' ' ) {
args++;
}
if( s[i] == ',' ) {
args++;
}
}
Tudo isso é o meio mais alto, mas talvez isso poderia ser a sua chávena de chá, Elsa pode analisar c ++ e fornecê-lo com uma árvore de sintaxe abstrata do arquivo analisado. Pode haver algumas outras ferramentas gratuitas lá fora, que podem fazer o mesmo