我正在阅读Effective C++,第 3 版和第 2 项(更喜欢 const、枚举和内联而不是 #defines),Scott Meyers 提到了符号表:他解释说#defines
可能不会出现在符号表中。
根据这里的答案,一些建议的阅读,以及维基百科的文章,我将符号表定义如下:由于编译器只为每个翻译单元创建目标文件,我们仍然需要一种方法来引用符号之间的符号翻译单位。这是使用为每个目标文件创建的表来完成的,以便可以在稍后阶段定义符号 - 在从目标文件创建可执行文件/库时由链接器定义。在链接过程中,符号被链接器替换为相应的内存地址。
这是我想知道的:
- 我上面的解释正确吗?
- 链接后,一旦解析了内存地址,我认为不需要符号表吗?也就是说,我认为符号表在可执行文件/库中不可用;那是对的吗?
- 我怀疑符号表对其他编译器任务也有用吗?诸如识别命名冲突之类的东西?
- 上述符号表与导出表不同。至少在 Visual C++ 的上下文中,导出表定义了在库外显式声明为可见的符号。我想在某种意义上这是一个符号表——但与 Scott 所指的符号表无关。
- 符号表还有什么有趣的地方吗?也就是说,我应该拥有关于符号表的任何其他见解吗?
感谢您的时间和贡献。