10:30:22 2019-08-20

基础不牢 瞬间爆炸

参考资料:https://blog.csdn.net/ts_54eagle/article/details/4418627

https://blog.csdn.net/xingjiarong/article/details/47656339

https://blog.csdn.net/xingjiarong/article/details/47656339

看看C Primer Plus上是怎么定义的

先说说作用域 分为4种:块作用域 函数作用域 函数原型作用域 文件作用域

这里要说明的是 块作用域指{}之间的部分

而函数作用域单单指goto标签   当goto标签出现在函数内部时 goto标签作用域蔓延至整个函数

函数原型作用域从形参定义到原型声明结束为止

文件作用域指的是 该文件 该文件 该文件  从变量定义到文件末尾都可见

链接分为3种:外部链接 内部链接 无链接  (决定了是否能被外部文件使用)

块作用域 函数作用域 函数原型作用域的变量 都属于无链接

文件作用域的变量  可以属于外部链接 也可属于内部链接

内部链接的文件作用域 称为 文件作用域(只能在该文件内部使用)

外部链接的文件作用域 称为 全局作用域(整个程序都可使用)

一个具有文件作用域的变量默认是具有全局作用域的   在前面加上static变为具有文件作用域

C对象有4种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。

如果某个变量具有静态存储期,该变量在程序运行过程中一直存在   文件作用域具有静态存储期

在具有文件作用域的变量前加上static 表示该变量的作用域限制为内部链接

对于所有的具有文件作用域的变量(无论它具有内部链接还是外部链接)都具有静态存储期  而声明了static的文件作用域的变量具有内部链接

存储类别 存储期 作用域 链接 声明方式
自动 自动 块内
寄存器 自动 块内 使用关键字register
静态外部链接 静态 文件 外部 所有函数外
静态内部链接 静态 文件 内部 所有函数外 使用关键字register
静态无链接 静态 块内 使用关键字register

auto: 默认情况下 声明在块内和函数头中的变量都是auto类型的变量   也可以显式的在变量声明时写上auto auto变量在使用时在栈上申请空间 使用结束后自动销毁

register:寄存器变量存储在寄存器中

static:对于局部变量来说 声明为static 在使用时只会声明一次  之后不会再声明 对变量的改变会被保存(对它进行改变是在定义改变量的块中 或者通过变量的指针)这样改 局部变量具有了静态存储期

对于外部变量(具有文件作用域的变量)来说 static会将该变量声明为内部链接

extern:用extern声明 表明变量定义在别处  (extern也是声明 是引用性声明 不是定义性声明)

在使用另外一个文件中的全局变量时要用extern声明   这让人有些迷惑 前面说 声明为外部变量(未加static)具有全局作用域 那不就是能被其它文件使用了吗  这样的想法是错误的

c primer puls解释的很清楚 :如果外部变量定义在一个文件中,那么其它文件在在使用该变量前必须先声明它(用extern声明)。也就是说,在某文件中对外部变量进行定义式声明只是单方面允许其它文件使用改变量,其它文件在用extern声明之前不能直接使用它

对于自动变量来说 未初始化 它中的数据是垃圾

对于具有静态生存期的变量来说 如果未初始化 它里面的数据为0

例子:

main.c

 #include <stdio.h>
void fun();
int main()
{
fun();
fun();
return ;
}
void fun()
{
int num2=;
static int num1;
printf("num1 is:%d\n",num1);
printf("num2 is:%d\n",num2);
num1++;
num2++;
}

输出结果:

可以看到 num1保存了上次的值

 //file1.c
int num1=;
static int num2=; //file.c
#include <stdio.h>
extern int num1;
extern int num2; //这句话只是说明num2是定义在另一个文件中的 但num2是不具有外部
//链接的 所以下面是无法使用的
int main()
{
printf("%d",num1);
//printf("%d",num2); //这句话是错的
return ;
}
 //file1.c
#include<stdio.h>
void fun()
{
printf("fun()");
} //file2.c
#include <stdio.h>
extern void fun();
int main()
{
fun();
return ;
}

extern也可以对函数进行引用式声明

C语言中static extern的使用的更多相关文章

  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关键字的深入理解 在一次面试的时候面试官问我static全局变量与全局变量的区别,之前虽然用过但是并没仔细去搞懂他,这次来细心的学习一下. 基本概念 使用static有三种情况 ...

随机推荐

  1. python虚拟环境安装使用

    # 安装 pip install virtualenv pip install virtualenvwrapper-win # win环境下 liunx下不需要-win #创建一个文件夹并cd进去mk ...

  2. Lucene查询语法汇总

    目录 一.单词查询 二.通配符查询 三.模糊查询 四.近似查询 五.范围查询 六.优先级查询 七.逻辑操作 八.括号分组 九.转义特殊字符 Lucene是目前最为流行的开源全文搜索引擎工具包,提供了完 ...

  3. pyppeteer基本使用demo

    # -*- coding: utf-8 -*- # 类似selenium,支持异步,不需要再单独安装环境,pyppeteer自动安装环境 # 异步await要写到一个函数的内部 from pyppet ...

  4. scrapy的扩展件extensions

    extensions.py文件 # -*- coding: utf-8 -*- # 该扩展会在以下事件时记录一条日志: # spider被打开 # spider被关闭 # 爬取了特定数量的条目(ite ...

  5. C#如何实现大小写转换

    2020-03-16  每日一例第8天 1.新建窗体应用程序,拖入label/textbox/radiobutton控件,并改text值:  2.button控件输入代码: if (radioButt ...

  6. 5G 将带给程序员哪些新机会呢?

    5G,第 5 代移动通信技术,华为在此领域远远领先同行,这也让它成了中美贸易战的最前线.我的第一份工作就在通信行业,当时电信标准都在欧美企业手里,国内企业主要是遵照标准研发软硬件设备,核心芯片靠进口. ...

  7. python基础学习day4

    列表的初识 why:int bool str str: 存储少量的数据. str:切片还是对其进行任何操作,获取的内容全都是str类型.存储的数据单一. what:list list = [66, ' ...

  8. express第三方中间件研究之bodyParser中间件

    转载至:http://www.cnblogs.com/lianer/p/5178693.html 接触nodejs已有一段时间了,但最近才开始落实项目,于是使用express应用生成器生成了一个应用. ...

  9. [Alg] 文本匹配-单模匹配与多模匹配

    实际场景: 网站的用户发了一些帖子S1, S2,...,网站就要审核一下这些帖子里有没有敏感词. 1. 如果网站想查一下帖子里有没有一个敏感词P,这个文本匹配要怎么做更快? 2. 如果网站想查一下帖子 ...

  10. 会话(cookie的使用,路径和Session的工作原理,使用)

    1.状态管理----Cookie 1.1 为什么需要状态管理 HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就丢掉了. 如果用户发来一个新的请 ...