Chinaunix首页 | 论坛 | 博客
  • 博客访问: 421906
  • 博文数量: 55
  • 博客积分: 167
  • 博客等级: 入伍新兵
  • 技术积分: 1167
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-28 10:20
个人简介

一个算是正常的中国码农!

文章分类

全部博文(55)

文章存档

2014年(1)

2013年(31)

2012年(23)

我的朋友

分类: C/C++

2013-07-25 14:14:26

原文地址:静态变量分析 作者: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.

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

阅读(1442) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~