Как извлечь конкретную функцию из файла исходного кода C / C ++ для последующей обработки - PullRequest
0 голосов
/ 12 февраля 2009

Я ищу простой способ распечатать определенную функцию из исходного кода C / C ++. Например, предположим, что test.c имеет несколько функций, определенных в нем. Я хочу иметь возможность распечатать исходный код, связанный только с одной из этих функций.

Редактировать: Извините, я должен быть более ясным о моей конечной цели. Я хочу, чтобы функция выводилась на экран, чтобы я мог использовать wc, чтобы получить количество слов этой конкретной функции. Кроме того, я хочу, чтобы это было частью цепочки инструментов командной строки, поэтому нельзя вручную вводить файлы и выделять текст.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2009

Вы можете запустить свой проект через doxygen . Он будет индексировать все ваши функции (и классы, структуры и т. Д.) И может сделать их доступными в нескольких форматах (включая PDF и HTML, которые легко распечатать).

0 голосов
/ 12 февраля 2009

Какова ваша конечная цель с распечаткой функции?

Хотите ли вы использовать это как таковое:

if (error == Foo())
{
    PrintFunction(foo);
    exit(1);
}

Есть более простые способы вывода ошибок. Я мог бы помочь больше, если бы имел лучшее представление о проблеме, которую вы пытаетесь решить с помощью этого.

Для идеи о том, как реализовать такую ​​функцию PrintFunction ():

  1. Иметь структуру данных, охватывающую функцию и содержащую: начало строки функции, конец строки функции и, возможно, указатель на функцию.
  2. Напишите функцию, которая печатает строку на основе номера исходный файл. __FILE__ дает вам имя исходного файла.
  3. Зная начало и конец, где находится функция код, печать функции будет тривиальной.

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

0 голосов
/ 12 февраля 2009

Я обычно использую print-region (или предпочтительно print-region-with-faces) изнутри emacs. Тем не менее, это не автоматизировано, я должен выбрать регион вручную.

Работает и на других языках.


Следующее из-за Тома Смита в комментариях:

(defun print-fn (interactive) 
   (save-excursion (mark-defun) 
   (print-region)))

Если вам понравилось, перейдите по ссылке на страницу пользователя Тома и посмотрите, заслуживает ли он вашего голоса ...


Делая это CW, так что я не получу пользы от людей, голосующих за хорошее мышление Тома. Приветствия.


Редактировать после уточнения: Кажется, это не указывает на фактический вопрос ОП. Увы.

...