簡體   English   中英

如何從C / C ++源代碼文件中提取特定功能以進行后續處理

[英]How do I extract a specific function from a C/C++ source code file for subsequent processing

我正在尋找一種從某些C / C ++源代碼中打印出特定功能的簡便方法。 例如,假設test.c中定義了幾個函數。 我希望能夠打印出僅與那些功能之一關聯的源代碼。

編輯:對不起,我應該更加明確自己的最終目標。 我希望將功能打印到屏幕上,以便可以使用wc來獲取此特定功能的字數。 另外,我希望它成為命令行工具鏈的一部分,因此不能手動輸入文件並選擇文本。

您可以通過doxygen運行您的項目。 它將為您的所有函數(以及類,結構等)建立索引,並使它們以多種格式 (包括PDF和HTML,均可輕松打印)提供。

我通常在emacs使用print-region (最好是print-region-with-faces )。 但是,它不是自動的,我必須手動選擇區域。

也可以使用其他語言。


以下是由於湯姆·史密斯的評論:

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

如果您喜歡這個,請點擊湯姆用戶頁面上的鏈接,看看他是否值得您投票...


做這個CW,所以我不會從支持Tom的好想法的人中受益。 干杯。


澄清后進行編輯:這似乎並不是針對OP的實際問題。 唉。

打印功能的最終目的是什么?

您是否要這樣使用:

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

有更簡單的方法可以輸出錯誤所在的位置。 如果我對您要解決的問題有更好的了解,我可能會提供更多幫助。

有關如何實現此類PrintFunction()的想法:

  1. 有一個環繞函數的數據結構,其中包含:函數行的開始,函數行的結束以及可能指向該函數的指針。
  2. 編寫一個函數,該函數根據源文件的編號打印出一行。 __FILE__為您提供源文件名。
  3. 知道了函數在代碼中所處位置的開始和結束之后,打印該函數將變得很簡單。

這有一個煩人的陷阱,那就是需要更新函數在文件中所在位置的行號。 但這可以用宏解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM