多文件中的static
这里借鉴一篇文章: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的更多相关文章
- [C/C++]在头文件中使用static定义变量意味着什么
文章出处:http://www.cnblogs.com/zplutor/ 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const ...
- java转换unicode,筛选文件中的insert语句并把日期给转换为可以直接在数据库执行的语句
package com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; impo ...
- IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中
需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数 ...
- 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 ...
- java:从指定问价中读取80个字节写入指定文件中
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class F ...
- c++多个文件中如何共用一个全局变量
例子: 头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使 ...
- 读取xlsx文件的内容输入到xls文件中
package com.cn.peitest.excel; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...
- C# static方法-使用迭代器循环遍历文件中的额行
//封装的方法 //读取文件的值,放入集合中 public static IEnumerable<string> ReadLines(string fileName) { using (T ...
- Django 中的static文件的设置
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ('article',os.path.jo ...
随机推荐
- ArcGIS API for JavaScript 4.2学习笔记[25] 官方第八章Analysis(空间查询)概览与解释
开森,最关注的空间分析章节终于到了,在空间查询那节逻辑性的代码简直要命(呵呵,空间分析的代码也要命...). 上目录截图: [Geodesic buffers(GeometryEngine)] 使用G ...
- Linux第五节随笔 /file / vim / suid /sgid sbit
三期第四讲1.查询文件类型与文件位置命令 file 作用:查看文件类型(linux下的文件类型不以后缀名区分) 语法举例: [root@web01 ~]# file passwd passwd: AS ...
- Linux发行版 CentOS6.5下的分区操作
本文地址http://comexchan.cnblogs.com/ ,尊重知识产权,转载请注明出处,谢谢! 查询磁盘信息并作分区规划 执行下述命令查询磁盘信息: fdisk -l 可知.数据盘大小50 ...
- linux部署solr服务--小记
1.将solr压缩包上传到web项目-solr文件夹下 2.解压solr-5.5.4.zip到当前文件夹下 linux 解压zip文件到当前目录 unzip filename.zip 提示没有unzi ...
- Anaconda系统中管理程序包(Package)
列出所有已安装的程序包 conda list 在已安装的程序包中查找某个特定的程序包 conda search package-name 安装程序包 conda install beautiful-s ...
- CSS 去掉inline-block间隙的几种方法
最近做移动端页面时,经常会用到inline-block元素来布局,但无可避免都会遇到一个问题,就是inline-block元素之间的间隙.这些间隙会导致一些布局上的问题,需要把间隙去掉.对于inlin ...
- Java第一章----Java概述+环境搭建
写在前面的话: Java基础的东西看过好几遍,但是过一段都就忘记了,所以这次我决定花费一些时间整理一个系列博客供以后方便查阅.此系列根据Java编程思想+Java核心技术两本书整理而来,这两本书也是我 ...
- angular4.0常用依赖汇总
Routes 路由配置 Router 路由跳转 ActivatedRoute 路由参数 FormsModule 表单配置(在app.module.ts中注入在imports下) EventEmitte ...
- ssh的免密登陆
想必大家都有使用ssh登陆的过程了,那么,怎么设置ssh免密登陆呢?下面有一些我的总结: 环境:服务器主.从 主服务器:192.168.1.1 从服务器:192.168.1.2 实现主服务器ssh登录 ...
- jdk8新特性(文章推荐)
文章推荐 jdk9都已经出来了,虽然很多项目都已经使用jdk8,但是很少会用到jdk8中的新特性.本人经常用的到也就是使用Stream,Lambda,但也仅仅是使用,基本不知道什么Function,C ...