我會盡可能簡短。 我有一個main.c文件,其中包含幾個頭文件「header1.h」,「header2.h」,...等等。在「main.c」中,使用用戶定義的結構來聲明變量。但是我不知道那個結構的位置(它必須出現在這些頭文件之一或其他頭文件中包含在「main.c」中的那些頭文件之一中)。我的問題是,如果我可以使用「grep」找到該結構的父文件?如果不是「grep」,還有什麼可以做的?我正在使用Ubuntu 14.04。如何在C中查找結構/函數的父頭文件?
2
A
回答
4
由於預處理程序只是將所有#include
d文件到地方,你可以運行,並期待在預處理輸出 - 它留下記號的地方顯示文件界限:
SO1.h
:
#ifndef SO1_H
#define SO1_H
struct Foo {};
#endif
SO2.h
:
#ifndef SO2_H
#define SO2_H
#include "SO1.h"
#endif
SO.cpp
:
#include "SO2.h"
int main(){}
既然你是在Ubuntu上,我假設你使用的是gcc(或clang,但它接受相同的選項)。如果你通過了-E
標誌,它只能運行在預處理,然後轉儲輸出:
# 1 "SO.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "SO.cpp"
# 1 "SO2.h" 1
# 1 "SO1.h" 1
struct Foo {};
# 4 "SO2.h" 2
# 2 "SO.cpp" 2
int main(){}
我們可以看到,文件標籤立即struct Foo
以上是SO1.h
,這就是那個struct
定義。
這對C和C++同樣適用(雖然我在我的例子中使用了C++)。但是,通常情況下,您應該爲問題選擇一種語言。
如果你知道你struct
搜索是在當前項目的地方(即在當前目錄中的某個地方),你的確可以使用基本的命令行工具,如grep
。例如
grep -Hn "\<struct Foo\>" *.{h,c,cpp}
會告訴你文件和一行匹配的源代碼文件。我經常在~/bin/srcgrep
使用一個小腳本我把:
#!/bin/bash
RE="$1"
shift 1
find [email protected] \(-name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.c" \) -exec grep263 -EHn --colour=always "$RE" {} \;
然後
srcgrep "\<struct Foo\>" dir1 dir2
將搜索所有源代碼文件的任何地方(包括子目錄)dir1
和dir2
下。
更高級的工具是ack!
。
相關問題
- 1. 在頭文件中使用結構C++
- 2. 在C++中的結構向量中查找函數的問題
- 3. C++單頭文件結構
- 4. typedef結構在頭文件中的結構定義在C文件
- 5. 如何使用Fortran的c頭文件中定義的結構?
- 6. 查找定義C函數的頭文件
- 7. C - 如何查找結構的大小?
- 8. C程序找不到包含在頭文件中的函數
- 9. 在C++中,如何引用不同頭文件中的函數?
- 10. 結構中的函數? C++
- 11. 頭文件結構
- 12. C++ - 在頭文件中初始化變量與構造函數
- 13. 將結構傳遞給頭文件中的函數
- 14. 頭文件中帶有函數結構的錯誤
- 15. C - 無頭文件的多個文件中的結構
- 16. 聲明在頭文件中的全球結構在C++
- 17. 在嵌套文件結構中查找缺失的文件名
- 18. 在Magento文件結構中查找正確的文件
- 19. 結構在單獨的頭文件導致C++中的問題
- 20. 在頭文件中使用的結構體[C - 的Linux]
- 21. 在單獨的頭文件中的C++結構
- 22. 如何在C中的頭文件中定義結構與盟友?
- 23. 如何查找目錄結構中的10個最大文件
- 24. GO:查找/掃描結構體/函數
- 25. 如何將文件中的數據結構轉換爲函數
- 26. 在PHP中查找層級結構中的父級密鑰
- 27. 如何避免在C++中調用祖父構造函數?
- 28. C++ stl :: map查找結構
- 29. C++快速查找結構
- 30. C#結構/查找表
'grep -rnw --color。-e「structure_name」' – LPs
您可以使用'IDE',比如'Eclipse',它可以讓您在文件搜索中查找。 – LPs
你真的在問如何在代碼庫中爲類或函數名稱執行文本搜索嗎?這真的已經得到4 upvotes了嗎?發酵的。 –