在 cpp 文件中列出外部变量

Posted

技术标签:

【中文标题】在 cpp 文件中列出外部变量【英文标题】:Listing external variables in cpp file 【发布时间】:2012-08-14 10:44:23 【问题描述】:

“nm”命令未列出外部变量,因为它们已被声明为 extern,因此在此程序中不会为它们分配内存。有没有其他方法可以列出外部变量?外部变量声明的信息存储在哪里?

操作系统 Windows 7 编译器mingw或vs2010

【问题讨论】:

出于什么目的,您希望列出外部可用的变量?我认为IDE调试器可能是要走的路。 不,外部符号 nm 列出。毕竟,链接编辑器需要它们。但是,除非您动态链接,否则链接过程只会解析符号,生成的可执行文件将不再包含它。 【参考方案1】:

它们会在那里,标记为 U 表示未定义。

extern int foo;
int bar() 
  return foo++;

给予:

g++ -c 测试.cc 纳米测试.o 00000000 T _Z3barv 你富

请注意,此示例需要 bar 才能运行。如果变量未使用,则不会在输出中生成引用。

【讨论】:

是的,如果变量未使用,则不会生成任何信息。但是这些信息(在这个文件中声明的外部变量)存储在哪里? @AlexHoppus 这是生成的目标代码中未定义的外部引用。其机制因输出平台而异,但基本上有一个此对象提供的符号列表以及此对象需要链接的符号。该列表(几乎)在您的编译器生成的每个目标文件中。 (在 Linux x86_64 或 ia32 上的 -fPIC 上,它将使用 GOT - 全局偏移表中的条目来查找它)。但它不存储看到的声明,它存储需要的符号,这就是为什么如果存在类型不匹配,您不太可能收到警告。

以上是关于在 cpp 文件中列出外部变量的主要内容,如果未能解决你的问题,请参考以下文章

lnk2001的问题

c_cpp 列出文件修改时间

请问C++中啥是函数的定义性声明和函数的引用性声明,有啥区别

C:外部变量声明并包含守卫[关闭]

从外部访问类对象

怎么写好一个C++的类不建议直接include包含cpp文件