static存储类型可以用于全部变量,无需考虑变量声明的位置。但是作用于块外部和块内部时具有不同的作用。
        (1)当作用于函数内部时,和每次程序离开所在块就会丢失值的自动变量不同,static变量会保存下去,块内的static变量只会在程序执行前进行一次初始化,而自动变量则会每次都初始化。接下来对此特性进行验证。

 #include "stdio.h"
void test(void)
{
static int a = ;
int b = ;
printf("a = %d,b = %d\n",a,b);
a = ;
b = ;
printf("a = %d,b = %d\n",a,b);
a = ;
b = ;
printf("a = %d,b = %d\n",a,b);
printf("***************\n");
}
void main()
{
test();
test();
}

   test()函数中初始化了两个变量,static变量a和自动变量b,第一次调用完成后结果都是一样的,但是在完成第二次的调用以后,不同的结果出现了,a=30,这就是在上次调用完成之后初始化的30,退出函数后并不会丢失,再次调用函数时也不会初始化,只有在赋值的时候才会改变。
   (2)当作用于函数头时。此时的函数只在当前文件有效,对于其他文件不可见。验证程序如下:
test.c
 /*test.c*/
#include "test.h"
#include "stdio.h"
static int a = ;
static void test_a()
{
printf("a = %d\n",a);
}
void put()
{
test_a();
}

test.h

 /*test.h*/
#ifndef __TEST_H__
#define __TEST_H__
void put();
static void test_a();
#endif

main.c

 #include "stdio.h"
#include "test.h"
void main()
{
put();
test_a();
}   
运行之后发生了如下的错误:
1>c:\users\administrator\desktop\20171212\2017121201\2017121201\main.c(9): error C2129: 静态函数“void test_a()”已声明但未定义
1> c:\users\administrator\desktop\20171212\2017121201\2017121201\test.h(6) : 参见“test_a”的声明
由此可见,static在函数头上时只能在当前文件有效。
 

关于C语言中static保留字的使用的更多相关文章

  1. C语言中static的作用及C语言中使用静态函数有何好处

    转自:http://www.jb51.net/article/74830.htm 在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0. 在C语言中,static ...

  2. C语言中static的使用方法【转】

    本文转自:http://blog.csdn.net/renren900207/article/details/21609649 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量 ...

  3. c语言中static 函数和普通函数的区别

    C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令: 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放 ...

  4. C语言中static用法介绍

    C语言中static用法介绍     对于新手来说,很多东西的用法还不是很清楚,我们今天一起来看看C语言中static用法介绍     1.声明了static的变量称为静态变量,根据作用域的不同又分为 ...

  5. C语言中static关键字的作用

    static的作用(精辟分析) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加sta ...

  6. C语言中static作用

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...

  7. C语言中static关键字的用法

    C记得还是大一时学的,现在觉得好久没用了,又捧起来看看.今天刚看到有关static关键字,仔细地看了一遍<C和指针>这本书中的解释,现在觉得清楚多了. 首先,我们将static关键字,修饰 ...

  8. 在不同语言中static的用法

    static (计算机高级语言) 编辑 像在VB,C#,C,C++,Java,PHP中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN.ALGOL.COBOL.BA ...

  9. C语言中static修饰符的意义

    在C语言中,static通常有2种含义:1)定义变量的生命周期:2)定义变量或者函数的作用域. 变量的生命周期是指,相对于程序运行的进程生命周期,变量存在的时间段.变量的生命周期由变量的存储类型(位置 ...

随机推荐

  1. python web框架篇:views视图函数

    Django请求的生命周期是怎样的? 简单地说,通过URL对应关系匹配 ->找到对应的函数(或者类)->返回字符串(或者读取Html之后返回渲染的字符串) 解剖起来如下: 1. 当用户在浏 ...

  2. dfs序和欧拉序

    生命不息,学习不止,昨天学了两个算法,总结一下,然而只是略懂,请路过的大佬多多谅解.   一.dfs序 1.什么是dfs序? 其实完全可以从字面意义上理解,dfs序就是指一棵树被dfs时所经过的节点的 ...

  3. FTP&samba 服务简单部署

    第1章 FTP服务部署 在Linux下,我们应用最广泛的FTP服务程序是 vsftpd ( TCP端口:而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与 ...

  4. 0_Simple__cudaOpenMP

    在OpenMP的多线程程序中,各线程分别调用CUDA进行计算.OpenMP的简单示例. ▶ 源代码: #include <omp.h> #include <stdio.h> # ...

  5. SSH框架整合--applicationContext.xml文件配置实例

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  6. 1.Introduction 介绍

    Welcome to Log4j 2! Introduction Almost every large application includes its own logging or tracing ...

  7. Spring IOC容器分析(2) -- BeanDefinition

    上文对Spring IOC容器的核心BeanFactory接口分析发现:在默认Bean工厂DefaultListableBeanFactory中对象不是以Object形成存储,而是以BeanDefin ...

  8. JavaScript系列-----Object之toString()和valueOf()方法 (2)

    深入理解toString()和valueOf()函数 1.我们为什么要了解这两种方法 众所周知,toString()函数和valueOf函数,这两个函数是Object类的对象生来就拥有的,而且他们还可 ...

  9. 【Kafka源码】处理请求

    [TOC] 在KafkaServer中的入口在: apis = new KafkaApis(socketServer.requestChannel, replicaManager, groupCoor ...

  10. C#执行PowserShell 脚本

    Windows PowserShell能够很简洁 快速通过Script脚本方式获得我们想要执行效果. 如何在C#中任意执行PowerShell脚本.?类似目前我要在做一个进程管理工具. 通过Power ...