c - 在 C 程序中列出全局数组变量

标签 c code-analysis ctags

之前有一个类似的问题是关于在 C 中列出全局变量,并且使用 nm 和 ctags 来回答这个问题。 ctags cli 是 - ctags -R -x --sort=yes --c-kinds=v --file-scope=no

是否有仅列出全局数组的 ctags 选项。在一个巨大的代码库中,我们试图减少内存占用,需要分析所有全局数组。谢谢。

最佳答案

如果您使用 universal-ctags ( https://ctags.io ),作为 u-ctags 的一部分分发的 readtags 可能会对您有所帮助。 readtags 命令支持基于 S-expression 的过滤。

[yamato@slave]~/var/ctags-github% cat /tmp/a.c 
cat /tmp/a.c 
int f[10];
int g;
struct point {
  int x, y;
} points [64][32];
[yamato@slave]~/var/ctags-github% ./ctags --kinds-C=v --fields=+t /tmp/a.c 
./ctags --kinds-C=v --fields=+t /tmp/a.c 
[yamato@slave]~/var/ctags-github% cat tags 
cat tags 
!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   1   /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_OUTPUT_MODE   u-ctags /u-ctags or e-ctags/
!_TAG_PROGRAM_AUTHOR    Universal Ctags Team    //
!_TAG_PROGRAM_NAME  Universal Ctags /Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL   https://ctags.io/   /official site/
!_TAG_PROGRAM_VERSION   0.0.0   /26a9333b/
f   /tmp/a.c    /^int f[10];$/;"    v   typeref:typename:int[10]
g   /tmp/a.c    /^int g;$/;"    v   typeref:typename:int
points  /tmp/a.c    /^} points [64][32];$/;"    v   typeref:struct:point[64][32]
[yamato@slave]~/var/ctags-github% ./readtags -t tags -e -Q '(substr? ($ "typeref") "[")' -l
./readtags -t tags -e -Q '(substr? ($ "typeref") "[")' -l
f   /tmp/a.c    /^int f[10];$/;"    kind:v  typeref:typename:int[10]
points  /tmp/a.c    /^} points [64][32];$/;"    kind:v  typeref:struct:point[64][32]

关于c - 在 C 程序中列出全局数组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56142757/

相关文章:

python - 核心转储 : Extract all the global variables , 核心转储中的数据结构和子结构

c - 删除链表 C 时出现段错误

c# - 使用 Roslyn 检测 lambda 表达式的长度

c# - 集合属性应该是只读的——漏洞?

emacs - 如何使用 emacs 以编程方式创建/更新 TAGS 文件?

Vim:如何使用 ctags 转到 C++ 方法的声明

c - 删除列表中的最后一个元素

c - 骰子实验,增加最大 throw 次数

code-analysis - 代码片段的 Big-Oh 表示法

ctags 多行 C 函数原型(prototype)