您的位置:知蚁博客 » C/C++程序设计 » 深入详解C/C++中的全局变量和静态局部变量(下)

深入详解C/C++中的全局变量和静态局部变量(下)

作者: 发布时间:2011-06-05 分类:C/C++程序设计 标签: 3,487人浏览

  在深入详解C/C++中的全局变量和静态局部变量(上)中我们介绍了编译器选项/FA、Data Segment、BSS SEGMENT等内容,以及全局变量与Data Segment、BSS SEGMENT的关系。本文将继续进行静态全局变量和静态局部变量的介绍。

静态全局变量

  在声明全局变量的时候可以加上static关键字,使这个全局变量只能用于定义其的文件,解决了多个文件中不能使用同名全局变量的问题。

static double d = 1.0;
static float f = 1.0;
int a = 1;
char c = 1;

  这里我们把前面两个变量声明为静态的全局变量,编译后打开a.asm文件:

PUBLIC ?a@@3HA      ; a
PUBLIC ?c@@3DA      ; c
_DATA SEGMENT
_d DQ 03ff0000000000000r  ; 1
_f DD 03f800000r   ; 1
?a@@3HA DD 01H     ; a
?c@@3DA DB 01H     ; c
_DATA ENDS

  可以看到PUBLIC部分少了声明为static的全局变量,在DATA SEGMENT中多了个_d和_f,这个是对d和f进行初始化的情况,如果不进行初始化,在a.asm中d和f就彻底消失了(问:咦,那到底哪去了呢?知蚁:别问我,我也不知道!)

静态局部变量

  看完了全局变量,我们顺便来看看静态全局变量,看看它存在什么地方的。

#include “stdio.h”

void main()
{
 static int e = 3;

 printf(“e=%d”,e);
}

来段很简单的代码就可以了,编译,查看asm文件,原来是在DATA SEGMENT中啊,具体如下:

_DATA SEGMENT
_?e@?1??main@@9@4HA DD 03H
_DATA ENDS

这个名字就改的更丑了,还好是给机器看的,不是给我们看的!

如果在声明e的时候不进行初始化,那么你就会在BSS SEGMENT中找到被改名后的静态局部变量e了。

_BSS SEGMENT
_?e@?1??main@@9@4HA DD 01H DUP (?)
_BSS ENDS

结语

  总算是写完了,希望能通过这些介绍,让你能更加的了解C/C++中的全局变量,只有了解个中原委用起来才能得心应手,最后祝大家过个愉快的端午节!
原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/89

相关文章

12访客评论 ,博主回复5

  1. 过来看看了 呵呵 支持一下

  2. c++深奥的东西 不过现在不得不学习 考试啊

    • 有机会最好还是好好学下的比较好

      知蚁06-06 20:50 回复
  3. 不错啊。。。。。。。。。

    深圳SEO06-05 12:48 回复
  4. 感叹我的C++啊。 学的真的不好。

    • 你才大一,还可以慢慢学的嘛

      知蚁06-06 20:48 回复
  5. 这东东具体有什么作用呢?

    天玉有双06-06 08:59 回复
    • 是指的C++还是全局变量啊?

      知蚁06-06 20:47 回复
  6. 说得蛮不错的

    大鹏博客06-06 09:04 回复
  7. 来看下 呵呵

    混小子06-06 09:20 回复
  8. 应该整个中篇的。

    来个
    上 中 下。。。

    • 呵呵,貌似整个中,下就没得写了

      知蚁06-06 20:45 回复
  9. 节日快乐!

    姜敏06-06 18:52 回复
    • 节日快乐,(*^__^*) 嘻嘻……!

      知蚁06-06 20:44 回复
  10. 完全看不懂啊!呵呵

  11. 看看,,学习一下

我来说说

(必须)

(必须,保密)

你确定你已经看过文章了?
取消

无觅相关文章插件,快速提升流量