C++ 如何在C中找到结构/函数的父头文件?

C++ 如何在C中找到结构/函数的父头文件?,c++,c,grep,ubuntu-14.04,C++,C,Grep,Ubuntu 14.04,我会尽量简短。 我有一个main.c文件,其中包括几个头文件“header1.h”、“header2.h”、。。。等等在“main.c”中,使用用户定义的结构声明变量。但我不知道该结构的位置(它必须存在于“main.c”中的某个头文件或包含在其中一个头文件中的其他头文件中)。我的问题是,我是否可以在任何情况下使用“grep”来查找该结构的父文件?如果不是“grep”,还能做什么?我使用的是Ubuntu 14.04。因为预处理器只是将所有的#included文件复制到适当的位置,你可以运行它,查看

我会尽量简短。
我有一个main.c文件,其中包括几个头文件“header1.h”、“header2.h”、。。。等等在“main.c”中,使用用户定义的结构声明变量。但我不知道该结构的位置(它必须存在于“main.c”中的某个头文件或包含在其中一个头文件中的其他头文件中)。我的问题是,我是否可以在任何情况下使用“grep”来查找该结构的父文件?如果不是“grep”,还能做什么?我使用的是Ubuntu 14.04。

因为预处理器只是将所有的
#include
d文件复制到适当的位置,你可以运行它,查看预处理的输出-它保留了表示文件边界的符号:

SO1.h

#ifndef SO1_H
#define SO1_H
struct Foo {};
#endif
#ifndef SO2_H
#define SO2_H
#include "SO1.h"
#endif
SO2.h

#ifndef SO1_H
#define SO1_H
struct Foo {};
#endif
#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(){}
将告诉您匹配源代码文件的文件和行。我经常使用我放在
~/bin/srcgrep
的一个小脚本:

#!/bin/bash
RE="$1"
shift 1
find $@ \( -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.c" \) -exec grep263 -EHn --colour=always "$RE" {} \;
然后

srcgrep“\”目录1目录2
将在
dir1
dir2
下的任何位置(包括子目录)搜索所有源代码文件


更高级的工具是。

grep-rnw--color-e“structure_name”
您可以使用
IDE
,如
Eclipse
,它提供
在文件中查找
搜索。您真的想知道如何在代码库中对类或函数名执行文本搜索吗?这真的已经获得了4票了吗?巴米,我不同意。这是一个有趣的问题,而且提出得很好。一个好的答案是,许多编译器都支持只运行预处理器的选项。明显的感觉不应该成为否决投票的动机。黑洞辐射能量的事实对一些人来说是显而易见的。这是一个
IDE
将为你做的事情。我使用
eclipse
F3
来定义/声明符号。