functions from declarar c++ c function-prototypes

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 .



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.