Pregunta

Mientras refactorizaba un código antiguo, me di cuenta de que un archivo de encabezado en particular estaba lleno de declaraciones de funciones para funciones eliminadas hace mucho tiempo del archivo .cpp.¿Alguien conoce alguna herramienta que pueda encontrarlos (y eliminarlos) automáticamente?

¿Fue útil?

Solución

Si es posible, podría crear un archivo test.cpp para llamarlos a todos, el vinculador marcará los que no tienen código como no resueltos, de esta manera su código de prueba solo necesita compilarse y no preocuparse por ejecutarse.

Otros consejos

PC-lint se puede ajustar para fines específicos:

Probé el siguiente código para tu pregunta:

void foo(int );

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

y obtuve el siguiente 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

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

Entonces puedes pasar el número de advertencia 752 para tu propósito:

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

-e"*" eliminará todas las advertencias y +e752 activará esta específica

Si indexa el código con Doxygen, puede ver desde dónde se hace referencia a cada función.Sin embargo, tendría que examinar cada clase (1 página HTML por clase) y buscar aquellas que no tengan nada que las señale.

Alternativamente, puede usar ctags para generar una lista de todas las funciones en el código y luego usar objdump o alguna herramienta similar para obtener una lista de todas las funciones en archivos .o y luego comparar esas listas.Sin embargo, esto puede resultar problemático debido a la alteración de nombres.

No creo que exista tal cosa porque algunas funciones que no tienen un cuerpo en el árbol fuente real podrían estar definidas en alguna biblioteca externa.Esto solo se puede hacer creando un script que haga una lista de funciones declaradas en un encabezado y verifique si a veces se llaman.

tengo un Complemento ft de C++ para vim lo que sí se puede hacer es comprobar e informar funciones inigualables: vimmers, el paquete ftplugin aún no es sencillo de instalar.El ftplugin se basa en resultados de ctags (de ahí su heurístico podría adaptarse fácilmente a otros entornos), a veces hay falsos positivos en el caso de funciones en línea.

HTH,

Además, con Doxygen (@Milan Babuskov), puedes ver si hay advertencias para esto en tu compilador.P.ej.gcc tiene la función -Wunused para funciones estáticas;-fdump-ipa-cgraph.

He oído cosas buenas sobre PC-pelusa, pero imagino que probablemente sea excesivo para sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top