Список глобальных переменных массива в программе на C - PullRequest
1 голос
/ 15 мая 2019

Ранее был задан похожий вопрос о перечислении глобальных переменных в C и ответах на них с использованием nm и ctags.ctags cli был - ctags -R -x --sort = yes --c-types = v --file-scope = no

Существует ли опция ctags для отображения только глобальных массивов.В огромной базе кода мы пытаемся уменьшить объем памяти и должны анализировать все глобальные массивы.Спасибо.

1 Ответ

0 голосов
/ 15 мая 2019

Если вы используете универсальные ctags (https://ctags.io),, readtags, распространяемые как часть u-ctags, могут вам помочь. Команда readtags поддерживает фильтрацию на основе S-выражений.

[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]
...