Pergunta

Ao refatorar algum código antigo, percebi que um arquivo de cabeçalho específico estava cheio de declarações de funções para funções há muito removidas do arquivo .cpp.Alguém conhece uma ferramenta que possa encontrá-los (e removê-los) automaticamente?

Foi útil?

Solução

Se possível, faça um arquivo test.cpp para ligar para todos, o vinculador sinalizará os que não têm código como não resolvidos; assim, seu código de teste só precisa de compilação e não se preocupar em realmente executar.

Outras dicas

PC-LINT pode ser ajustado para fins dedicados:

Eu testei o seguinte código contra sua pergunta:

void foo(int );

int main()
{
    return 0;
}
lint.bat test_unused.cpp

e obteve o seguinte resultado:

============================================================

--- Module:   test_unused.cpp (C++)

    --- Wrap-up for Module: test_unused.cpp

Info 752: local declarator 'foo(int)' (line 2, file test_unused.cpp) not referenced
test_unused.cpp(2) : Info 830: Location cited in prior message

============================================================

Então você pode passar no aviso número 752 para o seu puropse:

lint.bat  -"e*"  +e752  test_unused.cpp

-e "*" removerá todos os avisos e +e752 ativará este específico

Se você indexar para codificar com doxygen, poderá ver de onde está cada função referenciada. No entanto, você teria que navegar por cada classe (1 página html por classe) e digitalizar para aqueles que não têm nada apontando para eles.

Como alternativa, você pode usar o CTAGS para gerar lista de todas as funções no código e, em seguida, usar o Objdump ou alguma ferramenta semelhante para obter a lista de todas as funções nos arquivos .o - e comparar essas listas. No entanto, isso pode ser problemático devido ao nome do nome.

Eu não acho que exista isso porque algumas funções não têm um corpo na árvore de origem real podem ser definidas em alguma biblioteca externa. Isso só pode ser feito criando um script que faz uma lista de funções declaradas em um cabeçalho e verifica se às vezes são chamadas.

eu tenho um Plug-in C++ para vim isso é capaz de verificar e relatar funções incomparáveis ​​​​- vimmers, o pacote ftplugin ainda não é fácil de instalar.O ftplugin é baseado nos resultados do ctags (daí seu heurística poderia ser facilmente adaptado a outros ambientes), às vezes há falsos positivos no caso de funções inline.

HTH,

Além disso, doxygen (@Milan Babuskov), você pode ver se há avisos para isso no seu compilador. Por exemplo, o GCC possui função -função para funções estáticas; -fdump-ipa-cgraph.

Eu ouvi coisas boas sobre PC-Lint, mas imagino que provavelmente seja um exagero para suas necessidades.

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