from - Extracción de prototipos de función C/C++
std::function c++ (8)
La herramienta cproto hace lo que quiere y permite ajustar la salida a sus requisitos.
Nota: Esta herramienta solo funciona para archivos C.
Quiero hacer esto:
extract_prototypes file1.c file2.cpp file3.c
y haga que cualquier script / programa imprima una buena lista de prototipos de función para todas las funciones definidas en los archivos C / C ++ dados. Debe manejar bien las declaraciones de varias líneas.
¿Hay algún programa que pueda hacer este trabajo? Cuanto más simple, mejor.
EDITAR: después de intentar compilar dos programas C, puntos de bonificación por algo que usa {perl, python, ruby}.
Puede ejecutar el archivo fuente a través de este 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;
}
Ejecutar a través del preprocesador para deshacerse de los comentarios. Si tiene llaves inigualables debido a #ifdefs, debe establecer las definiciones, incluya archivos para que no sea así.
por ejemplo, cc cproto_parser.c -o cproto_parser; cc -E your_source_file.c|./cproto_parser
cc cproto_parser.c -o cproto_parser; cc -E your_source_file.c|./cproto_parser
Si formatea adecuadamente sus comentarios, puede probar DOxygen . De hecho, si no lo ha probado antes, le recomendaría darle una oportunidad de todos modos: generará gráficos de herencia, así como listas y descripciones de funciones de miembros completos (de sus comentarios).
Solía usar doxygen para generar documentación para mi código C ++. No soy un experto, pero creo que puedes usar doxygen para generar algún tipo de archivo de índice de los prototipos de función.
Aquí hay un thread de alguien que hace una pregunta similar
Yo uso ctags
# p = function declaration, f = function definition
ctags -x --c-kinds=fp /usr/include/hal/libhal.h
También funciona con C ++
ctags -x --c++-kinds=pf --language-force=c++ /usr/include/c++/4.4.1/bits/deque.tcc
Tenga en cuenta que es posible que necesite agregar rutas de inclusión, haga esto usando -I /path/to/includes
.
http://cfunctions.sourceforge.net
(Esto solo tiene C y un subconjunto limitado de C ++. Descargo de responsabilidad: este es mi programa).
gccxml podría ayudar, aunque tal como está, solo hace la mitad del trabajo que desea. Necesitarás algún procesamiento de la salida XML
gccxml
es interesante, pero imprime un árbol xml. Necesita extraer información sobre clase, funciones, tipos e incluso las plantillas especializadas de clase y funciones. gccxml
usa el analizador de GCC, por lo que no es necesario que hagas el peor trabajo que está analizando el archivo C ++, y estás 100% seguro de que es lo que probablemente el mejor compilador entienda.