gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:58:02 25 4
gpt4 key购买 nike

我会尽可能简短。我有一个 ma​​in.c 文件,其中包含几个头文件“header1.h”、“header2.h”……以及很快。在“ma​​in.c”中,使用用户定义的结构声明了一个变量。但我不知道该结构的位置(它必须存在于这些头文件之一或包含在“ma​​in.c”中的这些头文件之一中的其他头文件中)。我的问题是,如果我无论如何都可以使用“grep”来找到该结构的父文件?如果不是“grep”,还能做什么?我正在使用 Ubuntu 14.04。

最佳答案

因为预处理器只是将所有 #included 文件复制到位,您可以运行它,并查看预处理的输出 - 它会在适当的位置留下显示文件边界的符号:

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 $@ \( -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.c" \) -exec grep263 -EHn --colour=always "$RE" {} \;

然后

srcgrep "\<struct Foo\>" dir1 dir2

将搜索dir1dir2 下任意位置(包括子目录)的所有源代码文件。

一个更高级的工具是ack! .

关于c++ - 如何在 C 中找到结构/函数的父头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36198918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com