如何在系统识别的不同功能中使用相同名称的静态变量?

时间:2010-05-03 08:41:00

标签: c variables static

AFAIK,我们可以在不同的函数中有两个同名的静态变量吗?这些是如何由编译器和符号表管理的?他们的身份如何单独管理?

3 个答案:

答案 0 :(得分:3)

编译器不会在链接符号表中存储静态变量的名称。就链接器而言,它们只是模块的一部分内存。 (在所有情况下,这可能不是100%真实,但实际上是真的)

静态变量的名称通常包含在调试符号表中。

当您将.c文件提供给编译器时,它会跟上所有已知符号的名称,以便它们可以识别它们在将来的代码中出现时的状态。它还会记住它们,以便它可以提供有用的错误/警告消息,但在生成输出文件时它几乎会忘记它们(除非生成调试符号)。

答案 1 :(得分:1)

它们可能在表格中被破坏,其方式与实现重载函数的方式类似。

如果你想查看表格,请参阅dumpbin /symbols foo.obj,或者在linux上使用objdump

答案 2 :(得分:1)

这取决于编译器,但是一些嵌入式的只是在每个重复名称的末尾添加一个数字。这样每个变量都有一个唯一的名称。