我正在清理一些C代码.到处都有全局变量,但并非所有变量都被使用.我想清理那些.但是逐一测试它们太过分了.有没有简单的方法呢?
您可以使用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指出的那样),但它应该是一个好的开始.
如果它们仅在文件中使用,您可以将它们声明为“静态”,并且如果从未使用它们,GCC 将发出警告。
如果它们是从多个文件中使用的...除了 grep 或使用 IDE 之外,我不确定您如何检测到这一点,因为它们将显示为链接器符号,并且理论上可以由与您链接的任何代码访问代码...