这里借鉴一篇文章:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html#undefined

在这里举个例子,先和你说说局部变量和全局变量。

#include <stdio.h>
#include <STC89C5xRC.H>
void function2();
void function1();
void function3();
unsigned int iii = 0; //初始化全局变量
void main()
{
TI = 1; while(1)
{
function1();
function2();
function3();
}
} /*局部变量记得初始化*/ void function1()
{
unsigned int i = 0; //初始化
++i;
printf("i = %d\n",i);
}
void function2()
{
static unsigned int ii = 0; //初始化
++ii;
printf(" ii = %d\n",ii);
}
void function3()
{
++iii;
printf(" iii = %d\n",iii);
}

 输出结果为:

主函数前声明了function1(),function2(),function3(),以及声明并且初始化了一个全局变量 iii 。

我们还是先看functon1(),function2()。这两个函数里面都声明并且初始化了局部变量,但是我从输出的数据可以看到,变量 i 的数据在每一次进入function1函数时都进行初始化,并且进行自增 1 , 所以每一次的 i 输出的值每次都是 1.

而function2()函数在声明变量 ii 时,在开头加了static,所以会保存上一次的运算结果,不会再进行初始化。但是作用域也仅仅是在function2(),函数里面。

那么可能会有人问,如果不进行初始化会怎么样???

当然当然是乱套了啦,没有进行初始化,局部变量里面的数值将是随机的,不为人知的数据,所以声明变量的时候还是要对数据进行初始化的。不然的话,程序能不能正确运行都是一个问题。而在这个keil这个开发环境里面,不会警告,不会报错,但是程序不能正确运行。

然后再看全局变量 iii ,输出结果和变量 ii ,相同,但是和变量 ii , 有本质性不同的是,全局变量 iii 可以任意函数使用。而局部变量 ii 只能是function2使用。这些表象不同也是基于数据存储的位置不同而影响到数据的生存。局部变量的数据存储在堆栈段,全局变量存储在数据段。

接下来就说在多个C文件中static的使用:

首先还是要在工程里面添加三个C文件,如下图所示:

main.c

 #include <stdio.h>
#include <STC89C5xRC.H> void function3();
extern void function4();
extern void function5();
unsigned int iii = ; //初始化全局变量
void main()
{
TI = ; while()
{ function3();
function4();
function5();
}
}
void function3()
{
++iii;
printf("iii = %d\n",iii);
}

main_2.c

 #include <stdio.h>
static unsigned int iii =;
void function4()
{
iii++;
printf("static iii = %d\n",iii);
}

main_3.c

 #include <stdio.h>
static unsigned int iii =;
void function5()
{
iii++;
printf("static iii = %d\n",iii);
}

可以看到三个C文件中,都定义相同的变量 iii ,而且都是各自C文件的全局变量。但是却不冲突。输出的结果如下图所示:

所有的iii,虽然同名,但是,他们不是相同的地址。

多文件中的static的更多相关文章

  1. [C/C++]在头文件中使用static定义变量意味着什么

    文章出处:http://www.cnblogs.com/zplutor/ 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const ...

  2. java转换unicode,筛选文件中的insert语句并把日期给转换为可以直接在数据库执行的语句

    package com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; impo ...

  3. IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中

    需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数 ...

  4. 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...

  5. java:从指定问价中读取80个字节写入指定文件中

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class F ...

  6. c++多个文件中如何共用一个全局变量

    例子: 头文件:state.h   源文件:state.cpp 其它源文件:t1.cpp  t2.cpp  t3.cpp, 这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使 ...

  7. 读取xlsx文件的内容输入到xls文件中

    package com.cn.peitest.excel; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  8. C# static方法-使用迭代器循环遍历文件中的额行

    //封装的方法 //读取文件的值,放入集合中 public static IEnumerable<string> ReadLines(string fileName) { using (T ...

  9. Django 中的static文件的设置

    STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ('article',os.path.jo ...

随机推荐

  1. centos 7 部署 汉化版 gitlab

    =============================================== 2017/11/12_第6次修改                       ccb_warlock 更 ...

  2. java环境配置教程jde,jre

    控制面板--所有控制面板项--系统--高级系统设置--环境变量 JAVA_HOME = D:\java\jdk CLASSPATH = .;%JAVA_HOME%\lib;%JAVA_HOME%\li ...

  3. Jasperreports以及iReport4.5报表PDF导出字体完美解决方案

    在使用Jasperreports以及iReport设计报表时,导出PDF是一个常见的需求.网上解决PDF导出中文显示问题相关的文章很多,无非就是设置控件的pdf font name和pdf encod ...

  4. 微信小程序部署问题总结

    1.微信小程序免费SSL证书Https 申请(阿里云申请) 进入阿里云控制台后,选择CA证书服务 选择购买证书 但是阿里云的免费SSL证书藏得比较深,得这样操作才能显示出免费证书 点击Symantec ...

  5. VS代码生成工具ReSharper使用手册:配置快捷键(转)

    原文:http://blog.csdn.net/fhzh520/article/details/46364603 VS代码生成工具ReSharper提供了丰富的快捷键,可以极大地提高你的开发效率. 配 ...

  6. [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展trim,trimLeft,trimRight方法(2)

    我们接着上一篇的继续,在上一篇我们完成了工具库的架构,本文扩展字符串去空格的方法, 一共有3个 1,trimLeft: 去除字符串左边的空格 2,trimRight: 去除字符串右边的空格 3,tri ...

  7. Gulp自动化构建工具的简单使用

    相关网站 gulp官方网址:http://gulpjs.com gulp中文网站:http://www.gulpjs.com.cn/ gulp插件地址:http://gulpjs.com/plugin ...

  8. Dagoin之modelform组件

      ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提 ...

  9. asp.net mvc 5 蛋疼的问题

    看图,debugger显示匹配路径没有错.    html开源码看 显示没有实现IController. 然而我的确实现了.  关闭vs 重启

  10. 【矩阵快速幂】bzoj1297 [SCOI2009]迷路

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1407  Solved: 1007[Submit][Status ...