C语言的外部变量
来源:互联网 发布:2017淘宝金冠店铺排行 编辑:程序博客网 时间:2024/05/21 10:34
C语言的存储类型可分为:extern、auto、static、register。
外部变量定义在函数之外,通过同一个名字对外部变量的所有引用(即使这种引用来自于单独编译的不同函数),实际上都是引用同一个对外部变量的所有引用(C标准中把这一性质称为外部链接)。因此外部变量可以在全局范围内访问。
外部变量的初始化:
外部变量的作用域:
这里要具体的讲一下:一个外部变量在默认的情况下只能在定义它的编译单元内被访问,如果要在别的编译单元内可访问,则需使用关键字extern;若要外部变量只能在同一个编译单元被调用(也即不允许其他编译单元通过extern关键字访问到该变量),则需使用关键字static。很乱是吧!呵呵,看代码:
不加关键字static,在其他的编译单元(test2.c)可以访问到test1.c中的变量。
- //test1.c
- int
COMMON_VALUE = 100; -
- //test2.c
- extern
COMMON_VALUE;
如果test1.c如下所示,则在test2.c是无法访问到的
- //test1.c
- static
int COMMON_VALUE = 100;
extern和static的属性可以应用在公用头文件中:
假设有这样几个文件commonDef.h, test1.c, test2.c.其中test1.c和test2.c包含公用的头文件commonDef.h.
方法一:
- //commonDef.h
- #ifndef
__COMMON_DEF_H - #define
__COMMON_DEF_H -
- static
int COMMON_VALUE = 100; -
- #endif
这时候在test1.c和test2.c直接#include"commonDef.h"即可。
static关键字保证了包含该头文件的编译单元分别拥有该变量的独立实体,如同在每一个源文件分别定义一次;若不加static,则会造成“redifinition”。
方法二:
- //commonDef.h
- #ifndef
__COMMON_DEF_H - #define
__COMMON_DEF_H -
- extern
int COMMON_VALUE; -
- #endif
-
- //test1.c
- #include
"commonDef.h" - int
COMMON_VALUE = 100; -
- //test2.c
- #include
"commonDef.h"
也即在公用头文件中,使用extern关键字。然后再某一个源文件中定义一次,再在每一个使用它的编译单元中包含该头文件即可。
总结:C语言中,外部变量的默认的连接类型是extern,即外连接。
注意:
将外部变量的声明和定义区分开来很重要:
- C语言的外部变量
- C语言的外部变量
- C语言外部变量
- C语言的局部变量和外部变量
- C语言外部变量extern
- C语言外部变量的使用以及erxtern的用法
- C语言程序的外部变量与函数
- C语言引用外部变量和函数的区别
- C语言外部变量(extern)的使用
- 【C语言】C语言外部变量和内部变量
- 学ios需要了解的C语言基础知识-10-内外部函数,内外部变量
- C语言:全局变量、静态变量static、外部变量extern的区别
- 在C语言中,static静态变量,extern外部变量的区别
- c语言中局部变量,外部变量与作用域
- 浅析c语言中的变量(局部变量,外部变量,静态变量,寄存器变量)
- c语言中的变量(局部变量,外部变量,静态变量,寄存器变量)
- c语言中的变量(局部变量,外部变量,静态变量,寄存器变量) .
- 浅析c语言中的变量(局部变量,外部变量,静态变量,寄存器变量)
- IAR笔记-数据类型(转)
- 先转一篇开个头:这样快速闯…
- MSP430F5529 (一)通用I/O口的设置-1
- MSP430F5529 (一)通用I/O口的设置-2
- MSP430F5529 (二)看门狗的设置
- C语言的外部变量
- MSP430F5529 番外(一)常用内置函数和一些说明
- MSP430F5529 (三)统一时钟系统UCS-1
- MSP430F5529 (三)统一时钟系统UCS-2
- MSP430F5529 (四)电源&&&(五)工作模式
- MSP430F5529 (六)定时器Timer_A-1
- MSP430F5529 (六)定时器Timer_A-2
- 七、定时器Timer_B
- MSP430F5529 番外(二)纠正XT1配置错误