从C源文件创建全局变量列表
发布时间:2020-12-16 06:58:34 所属栏目:百科 来源:网络整理
导读:我正在处理问题,它的语句 – 生成文本文件,其中列出了.CPP文件中所有已声明的全局变量. 我提出了几个想法,第一个: 尝试使用ctags,所以我写了一些简短的脚本: while read linedoecho $lineprintf "%s" $line report.txtctags -x --c++-kinds=v --file-scope
我正在处理问题,它的语句 – 生成文本文件,其中列出了.CPP文件中所有已声明的全局变量.
我提出了几个想法,第一个: 尝试使用ctags,所以我写了一些简短的脚本: while read line do echo $line printf "%s" $line >> report.txt ctags -x --c++-kinds=v --file-scope=no "{$line}" | sort | sed "/const/d" | awk '{printf " %s",$1}' >> report.txt printf "n" >> report.txt done < cpp_source_file_list.txt 这段代码从cpp_source_file_list.txt获取.cpp源文件的文件名,扫描它以查找全局变量(忽略const)并写入报告“filename [变量列表]. 例如,它可以排除行ike“vector v;”,但包括“std :: vector v;”. 有没有办法解决这个问题?尝试使用ctags -I ./id.txt附加键并手动设置要覆盖的标识符列表,但它也会带来不正确的结果. 第二种方式: 使用nm命令,如: nm builtsource.o | grep '[0-9A-Fa-f]* [BCDGRS]' 但在这种情况下,我收到了不必要的信息,例如: 0000000000603528 B M 0000000000603548 B N 0000000000603578 B _ZSt3cin@@GLIBCXX_3.4 <- (!) 0000000000603579 B _ZSt4cout@@GLIBCXX_3.4 <- (!) 0000000000603748 B t 现在我不知道如何使用其中一种方法从任意.cpp源文件中获取有关已声明全局变量列表的正确信息.我很高兴听到有关这个问题的任何建议. 解决方法
您可以利用
Doxygen来实现这一点. Doxygen可以解析C文件并生成一个XML文件,该文件捕获文件中遇到的所有变量.具体来说,如果您设置以下配置选项:
EXTRACT_ALL= YES GENERATE_TAGFILE= doxygen.tag 给定一个输入文件: #include <vector> using namespace std; std::vector<int> s1; vector s2; 您可以使用以下内容生成输出doxygen.tag文件: <?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?> <tagfile> <compound kind="file"> <name>input.cpp</name> <path>C:/Users/haney/tmp/tmp55/</path> <filename>input_8cpp</filename> <namespace>std</namespace> <member kind="variable"> <type>std::vector< int ></type> <name>s1</name> <anchorfile>input_8cpp.html</anchorfile> <anchor>93b3bd32f5b6bff31bc4052716ddd444</anchor> <arglist></arglist> </member> <member kind="variable"> <type>vector</type> <name>s2</name> <anchorfile>input_8cpp.html</anchorfile> <anchor>8feb4a508135e43a72f227568b755a07</anchor> <arglist></arglist> </member> </compound> <compound kind="namespace"> <name>std</name> <filename>namespacestd.html</filename> </compound> </tagfile> 获得XML文件后,您应该能够提取出您正在寻找的信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |