Вопрос

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

extract_prototypes file1.c file2.cpp file3.c

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Я использую ctags

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

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

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

Обратите внимание, что вам может потребоваться добавить включаемые пути, сделайте это с помощью -I /path/to/includes.

http://cfunctions.sourceforge.net

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

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

Вот такой Нитки о том, что кто-то задает подобный вопрос

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

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

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

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

/* 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, вы должны установить defines, включить файлы, чтобы сделать это не так.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top