在C程序中列出全局变量

在C程序中列出全局变量,c,code-analysis,C,Code Analysis,是否有一个工具可以列出C程序中的所有全局变量?更具体地说,是否有一个简单的命令行工具可以做到这一点,即不是一个重量级的IDE、CASE、图形工具包系统等,而是可以像foo*.c?那样运行的工具。或者,带有-aux info的gcc。还有和,但这两个不是很简单。如果你碰巧在大多数unix上编译了文件,你的nm只列出了所有链接器符号。这些符号分为不同的组(有点依赖于平台),因此您应该很容易找到变量。ctags-R-x--sort=yes--c-kinds=v--file scope=no ctags

是否有一个工具可以列出C程序中的所有全局变量?更具体地说,是否有一个简单的命令行工具可以做到这一点,即不是一个重量级的IDE、CASE、图形工具包系统等,而是可以像
foo*.c

那样运行的工具。或者,带有
-aux info
的gcc。还有和,但这两个不是很简单。

如果你碰巧在大多数unix上编译了文件,你的
nm
只列出了所有链接器符号。这些符号分为不同的组(有点依赖于平台),因此您应该很容易找到变量。

ctags-R-x--sort=yes--c-kinds=v--file scope=no
ctags -R -x --sort=yes --c-kinds=v --file-scope=no file "c:\my sources" > c:\ctagop.txt

基本解决方案归功于Gaurav M.Bhandarkar。源路径之前的“文件”不是必需的。正如Gaurav M.Bhandarkar所示,可以使用“>”将输出转储到文件中。

您至少需要预处理器,因此大多数编译器都有一种方法可以输出一个映射文件,其中列出所有全局符号(函数和变量)及其地址。Doug-我已经很久没有查看映射文件了,我已经忘记了它们的存在:-)但是,是的,看看微软编译器生成的一个,全局变量很好地聚集在一起,标记为“common”。如果你把它贴出来作为一个答案,我可以把它标记为接受并投票。或者,嗯,它不是很好——有些全局变量没有这么标记,我不知道为什么,没有明显的模式。但nm似乎做得更好。
ctags -R -x --sort=yes --c-kinds=v --file-scope=no <path to dir containing source>