分类: C/C++
2014-02-24 22:06:21
原文地址:静态变量分析 作者:CUTianrui007
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.
重命名机制是编译器所独有的,各个编译器命名机制各不相同.