我想找出所有遞歸函數的名稱在C++項目中有很多文件。 有沒有任何IDE或腳本可以做到這一點?如何在C++項目中找到遞歸函數名稱列表
0
A
回答
0
這不像其他人想象的那麼容易。
函數調用可以位於雙引號字符串或註釋中,因此您可能需要刪除這些函數。刪除字符串時(或者可能將其替換爲單詞0STRING),您應該搜索匹配的雙引號。請注意0和
\"
令牌。即使刪除了所有這些,查找函數開始,結束和調用也是一項挑戰。例如,考慮模板功能。另外,如果存在宏f,f(a b){g(b);}並不是一個函數。也許你也想考慮這一點。
另外:
下面的函數是遞歸
class A {
F(int x) {
// ...
A::F(y);
}
}
而下面不是
class A {
F(int x) {
// ...
B::F(y);
}
}
大約相同的命名空間。名稱空間限定符(如類限定符)可能會使函數不遞歸。
您可能想用crange創建交叉引用鏈接表,然後用awk處理它。
0
恐怕你必須爲此編寫自己的腳本,而且這不是很簡單。您需要識別函數的開始和結束以及函數調用。那部分並不可怕。但是,您需要維護一堆嵌套函數,因此您始終知道此解析點的最內層函數。每當你找到對最內層函數的調用時,你都會報告你已經找到了遞歸。
的minorly棘手的情況是這樣的:
int func_a() {
...
int func_b() {
...
result = func_a()
}
recur = func_a()
的第一個電話是不是遞歸的;第二個是。嵌套可以變得更深 - 你必須計算大括號以外的文字字符串 - 爲左大括號加1,爲右大括號加1,然後檢查總數爲最內層函數的「大括號嵌套」數在你的堆棧上。
這是否有助於您邁向解決方案?
相關問題
- 1. 如何在Django項目中找到我的項目名稱?
- 2. 的Python:遞歸函數在列表中找到
- 3. 遞歸到函數中而不涉及函數名稱
- 4. 如何從列表框中按名稱查找項目
- 5. 匿名函數/遞歸在c#
- 6. 遞歸Python函數在列表中查找最小數字
- 7. 如何比較C#中兩個列表框的項目名稱?
- 8. 特定遞歸函數的名稱
- 9. 遞歸函數和列表
- 10. 列表的遞歸函數
- 11. 遞歸列表函數
- 12. R - 將數據幀名稱的列表傳遞到函數中
- 13. 如何能夠寫在文本框並排名稱的項目在C#中的列表框中找到?
- 14. 如何找到列表的名稱
- 15. 遞歸名稱
- 16. 如何傳遞函數名稱列表作爲參數?
- 17. 尋找目錄的遞歸python函數
- 18. 遞歸地重命名目錄名稱
- 19. 從項目名稱查找API中找到項目
- 20. c#從列表中找到linq到列表中的項目
- 21. C++遞歸函數
- 22. 遞歸函數C++
- 23. 在android中找不到列項目名稱
- 24. C中的遞歸函數#
- 25. 遞歸在C++函數
- 26. 在遞歸函數[C]
- 27. 在C++列表中累積尾遞歸函數
- 28. 返回項目的遞歸Python函數
- 29. 遞歸的方式尋找項目的數量在陣列
- 30. 如何在Python中使用遞歸在列表中找到偶數的和?
對所有文件運行正則表達式應該做這個工作 – Kazz
我不確定一個正則表達式會在那裏幫助... –
通過遞歸你是指那些直接調用自己,或者那些通過調用鏈重新輸入的那些?因爲第一個很容易做到,第二個需要更多的工作(靜態代碼分析工具可以創建一個調用圖,您可以查看週期)。 – StoryTeller