FileName.c中定义一个全局静态变量,static U8 u8StTest,这个静态变量不在任何函数中.在函数中定义一个静态变量,比如

 

Void Func1()

{

       Static U8 u8StTest;

          //other statements

}

那么这两个变量会不会重名呢?不会,为什么?

静态变量编译会对其进行重命名,也就是将静态变量的作用范围作为静态变量的名字的一部分,则作用范围不同,其名字也就不同,对于不在任何函数中的全局静态变量,其可能的重命名结果:_FileName@u8StTest,其格式为:文件名+变量名, 而函数中的局部静态变量,其重命名结果可能是:_ FileName@Func1@u8StTest,其格式为: 文件名+函数名+变量名.正是由于重命名,二者区分开了.

深入思考一下,其实在C++中,C++中的成员变量和成员函数也会重命名中被加上类名,比如

class ClassTest

{

public:

   U8 test1;

public :

    void Func1();
}

最终,编译器会将会生成如下的名字:_ClassTest@test1和_ClassTest@Func1.

重命名机制是编译器所独有的,各个编译器命名机制各不相同.

09-04 15:02