gpt4 book ai didi

c++ - 如何统计cpp文件中的所有全局变量

转载 作者:太空狗 更新时间:2023-10-29 23:52:38 25 4
gpt4 key购买 nike

是否存在任何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 个全局变量:ancestoransvcostgraphM , N, p, qr, 查询, u

最佳答案

您可以使用以下 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

让我们看看这是如何工作的。

  1. g++ -O0 -c B.cpp:这会在没有优化的情况下调用编译器,这样输出(B.o 默认情况下)几乎就是编译后的文件没有删除标识符。

  2. nm B.o:调用 nm一种工具(从链接中引用)“列出目标文件中的符号”。例如,如果“符号在未初始化的数据部分”,则有一个“B”。

  3. 我们想要全局值(表示大写)而不是 U、T 或 W。这就是 grep 所做的。

关于c++ - 如何统计cpp文件中的所有全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14663961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com