Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407233
  • 博文数量: 57
  • 博客积分: 193
  • 博客等级: 入伍新兵
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-13 14:37
个人简介

当以艺术眼光看程序,寻找程序后面的原理,做到化而不忘

文章分类

全部博文(57)

文章存档

2017年(5)

2015年(7)

2014年(27)

2013年(18)

我的朋友

分类: C/C++

2013-01-11 19:00:19

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.

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

阅读(3761) | 评论(0) | 转发(2) |
0

上一篇:从接口说起

下一篇:郁闷,发Blog

给主人留下些什么吧!~~