黑马程序员技术交流社区

标题: 关于static这到底是怎么回事?求大神解释 [打印本页]

作者: 洪吉童    时间: 2015-10-5 09:03
标题: 关于static这到底是怎么回事?求大神解释
本帖最后由 洪吉童 于 2015-10-5 09:07 编辑

1、我在test.c中定义了static全局变量count
  1. /********test.c***********/
  2. #include"stdio.h"
  3. #include"test.h"
  4. static int count=5;
  5. void test()
  6. {
  7.         printf("count=%d",count);
  8. }
复制代码

  1. /*******main.c************/
  2. #include"stdio.h"
  3. #include "stdlib.h"
  4. #include"test.h"
  5. int count=6;
  6. void main(){
  7.      
  8.      printf("count=%d\n",count);  //打印count值
  9.          test();
  10.     system("pause");              //DOS窗口停留  
  11. }
复制代码
为什么打印结果是count=5
                             count=5
既然是static变量不是只能在本文件中使用吗?怎么在main.c中也能用了?




2、如果我在test.c中不用static修饰count
  1. /********test.c***********/
  2. #include"stdio.h"
  3. #include"test.h"
  4. int count=5;
  5. void test()
  6. {
  7.         printf("count=%d",count);
  8. }
复制代码



在main.c中也不修饰全局的变量count
  1. /*******main.c************/
  2. #include"stdio.h"
  3. #include "stdlib.h"
  4. #include"test.h"
  5. int count=6;
  6. void main(){

  7. printf("count=%d\n",count); //打印count值
  8. test();
复制代码

打印结果仍然是:count=5                             count=5
不是应该报错有两个同名的变量吗?既然用不用static都一样,那它起什么作用?
PS:编译平台VC6.0







作者: 洪吉童    时间: 2015-10-5 09:12
再说明一下,我在test.h文件的代码没有声明变量,只声明了函数,因为声明变量会显示错误,重定义
  1. /********test.h***********/
  2. #include"stdio.h"
  3. void test();
复制代码



作者: HI奋斗    时间: 2015-10-5 09:49

努力,让自己更加强大!
作者: wjy0916    时间: 2015-10-5 10:18
纯属个人想法,没有理论依据,楼主如果有准确的答案,记得要发一下哟!!!!!!应该是引用了test.h的问题,可能引用了test.h后,你在test.c中定义的count    可能  会 把main.c的count暂时屏蔽,因为你没在.h中声明变量,所以不会出现重名变量。
作者: 羊口羊口羊    时间: 2015-10-5 21:26
我在Xcode试了第一种方法,打印出来第一个是6,第二个是5。可能是所用软件版本的问题
作者: 洪吉童    时间: 2015-10-5 22:19
羊口羊口羊 发表于 2015-10-5 21:26
我在Xcode试了第一种方法,打印出来第一个是6,第二个是5。可能是所用软件版本的问题 ...

对应该是,编译平台不一样
作者: LPz1994    时间: 2015-10-6 15:12
................




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2