Подтвердить что ты не робот

Извлечение прототипов функций C/С++

Я хочу сделать это:

extract_prototypes file1.c file2.cpp file3.c

и иметь любую script/программу, распечатать хороший список прототипов функций для всех функций, определенных в данных файлах C/С++. Он должен обрабатывать многострочные объявления.

Есть ли программа, которая может выполнять эту работу? Чем проще, тем лучше.

EDIT: после попытки скомпилировать две программы C, бонусные очки за что-то, что использует {perl, python, ruby}.

4b9b3361

Ответ 1

Инструмент cproto делает то, что вы хотите, и позволяет настраивать вывод в соответствии с вашими требованиями.

Примечание. Этот инструмент также работает только для файлов C.

Ответ 2

Я использую ctags

# p = function declaration, f = function definition
ctags -x --c-kinds=fp /usr/include/hal/libhal.h

Также работает с С++

ctags -x --c++-kinds=pf --language-force=c++ /usr/include/c++/4.4.1/bits/deque.tcc

Обратите внимание: вам может понадобиться добавить include paths, сделайте это, используя -I /path/to/includes.

Ответ 3

http://cfunctions.sourceforge.net

(Это только C и ограниченное подмножество С++. Отказ от ответственности: это моя программа.)

Ответ 4

Я использовал doxygen для создания документации для моего кода на С++. Я не эксперт, но я думаю, что вы можете использовать doxygen для создания своего рода индексного файла прототипов функций.

Вот thread того, кто задает аналогичный вопрос

Ответ 5

Если вы отформатируете свои комментарии соответствующим образом, вы можете попробовать DOxygen. На самом деле, если вы еще не пробовали это, прежде чем я порекомендую его в любом случае - он будет создавать графики наследования, а также полные списки функций и описания функций (из ваших комментариев).

Ответ 6

gccxml интересен, но он печатает дерево xml. Вам нужно извлечь информацию о классе, функциях, типах и даже специализированных шаблонах класса и функций. gccxml использовать синтаксический анализатор GCC, поэтому вам не нужно выполнять худшую работу, которая обрабатывает файл С++, и вы на 100% уверены, что это то, что, пожалуй, лучший компилятор понимает.

Ответ 7

gcc-xml может помочь, хотя это так, что он выполняет только половину работы, которую вы хотите. Вам понадобится обработка XML-вывода

Ответ 8

Вы можете запустить исходный файл через эту программу:

/* 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;                                
}                    

Запустите препроцессор, чтобы избавиться от комментариев. Если у вас есть непревзойденные фигурные скобки из-за #ifdefs, вы должны установить определения, включите файлы, чтобы сделать это не так.

например, cc cproto_parser.c -o cproto_parser; cc -E your_source_file.c|./cproto_parser