是否存在任何cpp代码解析器来解决此问题?例如
// B.cpp : Defines the entry point for the console application.
//
#include<iostream>
#include<vector>
#include<algorithm>
size_t N,M;
const size_t MAXN = 40000;
std::vector<std::pair<size_t,size_t> > graph[MAXN],query[MAXN],qr;
size_t p[MAXN], ancestor[MAXN];
bool u[MAXN];
size_t ansv[MAXN];
size_t cost[MAXN];
size_t find_set(size_t x){
return x == p[x] ? x : p[x] = find_set(p[x]);
}
void unite(size_t a, size_t b, size_t new_ancestor){
}
void dfs(size_t v,size_t ct){
}
int main(int argc, char* argv[]){
return 0;
}
此文件包含10个全局变量:祖先, ansv ,费用,图表, M , N , p , qr ,查询, u < / p>
答案 0 :(得分:8)
您可以使用以下shell命令调用编译器并计算导出的全局变量:
$ g++ -O0 -c B.cpp && nm B.o | grep ' B ' | wc -l
10
如果删除行数,则会得到他们的名字
$ g++ -O0 -c B.cpp && nm B.o | egrep ' [A-Z] ' | egrep -v ' [UTW] '
00000004 B M
00000000 B N
00111740 B ancestor
00142480 B ansv
00169580 B cost
00000020 B graph
000ea640 B p
000ea620 B qr
00075320 B query
00138840 B u
让我们看看它是如何工作的。
g++ -O0 -c B.cpp
:这会调用编译器而不进行优化,因此输出(默认为B.o
)几乎就是没有删除标识符的编译文件。
nm B.o
:调用nm一个工具(引自链接)“列出来自目标文件的符号”。例如,如果“符号在未初始化的数据部分中”,则存在“B”。
我们想要全局值(表示大写)但不是U,T或W.这就是grep的作用。