我声明了两个静态变量。一个是全局的,另一个是主要功能的本地。之后我做了nm a.out
输出:
0000000000000000 l O .data 0000000000000004 gloBAL_a <<<<< static outside main
0000000000000004 l O .data 0000000000000004 local_b.2127 <<< static inside main
.2127是什么意思?
答案 0 :(得分:0)
在文件范围声明变量时,它将具有唯一标识符gloBAL_a
。但是当你在本地范围内声明局部静态变量时,它可以使用与在别处分配的另一个变量相同的名称。
编译器因此使用名为&#34; name mangling&#34;的东西来确保内部使用的变量名永远是唯一的。也就是说,它在变量名后添加一个点和一个序列号。
您可以尝试将两个变量命名为相同的名称,并且您应该看到两种变量的名称相同。