有没有办法识别C项目中所有未使用的全局变量?

Ter*_*Yin 8 c global

我正在清理一些C代码.到处都有全局变量,但并非所有变量都被使用.我想清理那些.但是逐一测试它们太过分了.有没有简单的方法呢?

sar*_*old 6

您可以使用ctags(1)带有-x命令行选项的非常有用的命令生成目录中所有全局变量的列表:

ctags  -x  --c-kinds=v  --file-scope=no *.c
Run Code Online (Sandbox Code Playgroud)

这可以与非常有用的gid(1)命令结合使用(假设您mkid(1)首先在源上运行):

for name in `ctags  -x  --c-kinds=v  --file-scope=no *.c | awk '{print $1;}' | sort -u` ; do gid -R filenames $name ; done
Run Code Online (Sandbox Code Playgroud)

这为您提供了一个有用的列表,列出哪些文件使用哪些全局变量

$ for name in `ctags  -x  --c-kinds=v  --file-scope=no *.c | awk '{print $1;}' | sort -u` ; do gid -R filenames $name ; done
basedir        parser.h ./{parser_include,parser_main}.c
binary_input   parser_main.c
cache_fd       parser.h ./{parser_interface,parser_main}.c
conf_quiet     parser.h parser_main.c
conf_verbose   parser.h ./{parser_interface,parser_main}.c
...
Run Code Online (Sandbox Code Playgroud)

它并不完美(正如Ira指出的那样),但它应该是一个好的开始.


Owe*_*wen 3

如果它们仅在文件中使用,您可以将它们声明为“静态”,并且如果从未使用它们,GCC 将发出警告。

如果它们是从多个文件中使用的...除了 grep 或使用 IDE 之外,我不确定您如何检测到这一点,因为它们将显示为链接器符号,并且理论上可以由与您链接的任何代码访问代码...