1月9日,在线听RF检波器如何简化系统设计,与ADI工程师一起学习吧!→ 报名参会 ←
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【每天进步一点点】C语言学习笔记(变量类型:static,extern)

共20条 1/2 1 2 跳转至

【每天进步一点点】C语言学习笔记(变量类型:static,extern)

高工
2013-04-02 20:07:38    评分

前一段时间看到论坛里有网友谈到static的问题,今天专门拿出课本看了看,顺便整理一下。

一、关于局部变量全局变量及其应用在此就不多说了,关于变量类型简单介绍一下:

    一个数据变量有两种属性:数据类型,存储类别。按存储方式又分为:动态存储类型,静态存储类型,具体包括4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的。静态存储类型又牵扯到作用域和生存期。

二、关于auto类型,一般未做特殊定义的都默认为此类型,寄存器类型很少用到,了解即可,剩下的两种需要认真掌握,具体说明如下:

1、用static声明静态变量的说明:

    A、 Static将变量定义/声明为静态变量,存储在静态存储区,此变量的值在函数调用结束后不消失而保留原值,即其占用的内存单元不释放,在下一次调用该函数时,该变量已有值,静态变量在编译时赋初值,以后每次调用不再重新赋值。

    B、如果在定义静态变量时不赋初值,编译时自动赋值0(对数值型变量)或空字符(对字符变量)。而对于自动变量来说,如未赋初值的话,其值是不确定的,这是由于每次重新调用时其存储单元是重新另分配的,而所分配的存储单元中的值是不确定的。

    C、静态变量仅能被声明/定义他的函数/文件引用,即便在其他函数或文件中做了全局声明(extern),也无法被其他函数所引用。

    D、单纯的全局变量(非static定义)在其他函数或文件中经声明后可以轻松引用。

针对于函数也有相类似的情况。

2、用extern声明外部变量

    外部变量经extern声明后,就可以从“声明”处起,合法的使用该外部变量,即其有效区域得到了扩展。

用extern声明外部变量的时候,类型名可以写也可以不写。例:extern int Num 等价于 extern Num.

    如何在一个文件中引用另一个文件中定义的外部变量呢?

    正确的做法是:在任一个文件中定义外部变量,而在要调用他的文件中用extern对此变量进行“外部变量声明”即可。{通常我们都是在头文件中进行声明处理的}


注:用这样的全局变量应十分谨慎,因为在一个文件中修改了该变量的值,在另一个文件中也会受到影响。在多任务模块编程时尽量少用或不用。


更多详细内容请参考《C程序设计》第八章相关内容,谢谢




关键词: static     extern    

专家
2013-04-02 22:10:01    评分
2楼

真棒……

这要是做成一个系列,我就把“每天进步一点点”列出标签,供网友们参考



专家
2013-04-02 22:13:17    评分
3楼
楼主,能把讲到这几个知识,做几个示例程序,并进行讲解不?

高工
2013-04-02 22:19:48    评分
4楼
很好啊,可以添加一个标签,我争取让它全面开花(内容方面杂糅,不局限于某一门专业)

高工
2013-04-02 22:20:13    评分
5楼
这个工作量有点大,我试试呗

高工
2013-04-02 22:24:40    评分
6楼
每天跟着一起进步

高工
2013-04-02 23:44:10    评分
7楼
有错误之处还望多多指教

专家
2013-04-03 09:21:30    评分
8楼

凡事预则立,不预则废。

楼主,加油呗……



工程师
2013-04-03 10:50:32    评分
9楼

跟着楼主每天进步一点点,感谢楼主

问题:用extern声明外部变量的时候,类型名可以写也可以不写。

如果不写类型名,是不是默认是int型?

如果声明为无符号长增型,会不会也被extern视为默认的int型?



专家
2013-04-03 11:20:46    评分
10楼
每天进步一点点

共20条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]