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

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

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

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

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

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

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

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