如何在源代码中查找搜索词

uml*_*ute 3 c c++ grep

我正在寻找一种方法来搜索项目的C/C++代码中的给定术语,同时忽略注释和字符串中的任何出现.

由于代码库相当大,我正在寻找一种方法来自动识别与我的搜索词匹配的代码行,因为它们需要手动检查.

如果可能的话,我想在我的linux系统上执行搜索.

背景

所讨论的代码库是一个带有大量第三方插件的实时信号处理引擎.插件是用各种语言实现的(大多数是C语言,但也有C++和其他语言;目前我只关心这两种语言),没有强制执行任何标准.

我们的代码库目前使用内置类型float的浮点数,我们想用一个typedef允许我们使用双精度的代码.我们希望float在实际代码中找到所有出现的内容(忽略评论和打印输出中的合法用法).

更进一步的是,在代码有效负载中有一些(虽然很少)合法使用float(因此我们真的在寻找一种方法来识别所有需要手动检查的地方,而不是运行一些自动搜索和替换. )

代码还包含C样式的静态强制转换(float),因此依靠编译器警告来识别类型不匹配通常不是一种选择.

代码库由超过3000个(C和C++)文件组成,累积约750000行代码.

代码是跨平台的(linux,osx,w32是主要目标;但也是freebsd和类似的),并使用各种本机编译器(gcc/g ++,clang/clang ++,VisualStudio,...)进行编译.

至今...

到目前为止,我正在使用丑陋的东西:

 grep "\bfloat\b" | sed -e 's|//.*||' -e 's|"[^"]*"||g' | grep "\bfloat\b"
Run Code Online (Sandbox Code Playgroud)

但我认为必须有一些更好的方法来搜索有效载荷代码.

g0h*_*l1n 5

恕我直言,在"Unix和Linux"上有类似问题的答案很好:

grep适用于纯文本,并且对C程序的基础语法一无所知.因此,为了不在内部评论中搜索,您有以下几种选择:

  1. 在搜索之前删除 C-comments,您可以使用gcc -fpreprocessed -dD -E yourfile.c来执行此操作.有关详细信息,请参阅从C/C++代码中删除注释

  2. 编写/使用一些像你已经找到的hacky半工作脚本(例如,它们通过跳过以//或/*开头的行来工作),以便处理所有可能的C/C++注释的细节(同样,请参阅上一个链接一些可怕的测试用例).然后你仍然可能有误报,但你不必预先处理任何事情.

  3. 使用更高级的工具在代码中进行"语义搜索".我找到了"coccigrep":http://home.regit.org/software/coccigrep/ 这种工具允许搜索某些特定的语言语句(即更新具有给定名称的结构),当然他们会删除评论.

https://unix.stackexchange.com/a/33136/158220

虽然它并没有完全涵盖你的"不在字符串"的要求.