extern(外部变量)
|
static(静态变量)
|
auto(自动变量或局部变量)
|
register(寄存器变量)
| ||
全局变量
|
普通外部变量
|
静态全局变量
|
静态局部变量
| ||
作用于同一个工程(程序)的每个文件上。不得重名
|
在同一个文件中,前面的函数要引用在其后定义的外部变量(在函数外)时
|
只在定义它的文件内有效。同一工程的其它文件可以有重名,来表示不同含义
|
只在声明它的函数内有效
|
只在声明它的函数或语句块中有效
|
|
只在某个文件(函数外)定义一次,其他文件要引用时,应加extern说明
|
|
在外部变量前加static
|
|
|
|
在定义时可以不加extern,在引用时必须加
|
在定义时可以不加extern,在引用时必须加
|
|
|
|
|
依据“先声明后使用”原则
|
依据“先声明后使用”原则
|
|
|
|
|
在编译时分配空间
|
在编译时分配空间
|
在编译时分配空间
|
在编译时分配空间
|
在运行时分配空间
|
在运行时分配空间
|
隐含初值为0
|
隐含初值为0
|
隐含初值为0
|
隐含初值为0
|
其初值不确定
|
|
在所有引用文件内可见
|
在整个文件内可见
|
只在该文件内可见
|
只在该函数内可见
|
只在声明它的函数或语句块中可见
|
作用域与生存期与自动变量相同
|
若在某个函数内部重定义,则在其内部使用被屏蔽,而使用重定义的值,在该函数体后屏蔽结束,继续使用外部变量
|
若在某个函数内部重定义,则在其内部使用被屏蔽,而使用重定义的值,在该函数体后屏蔽结束,继续使用外部变量
|
若在某个函数内部重定义,则在其内部使用被屏蔽,而使用重定义的值,在该函数体后屏蔽结束,继续使用外部变量
|
只在编译时初始化一次
|
形参可以看作是自动变量,作用域仅限于相应函数内
|
只有自动变量和函数参数可指定为寄存器变量
|
在屏蔽期间,若要使用外部变量,可使用作用域运算符::,写法为:: 全局变量名
|
在屏蔽期间,若要使用外部变量,可使用作用域运算符::,写法为:: 全局变量名
|
在屏蔽期间,若要使用外部变量,可使用作用域运算符::,写法为:: 全局变量名
|
当函数执行完返回时,该变量值继续保留。下次再进入该函数,其值仍存在。
|
在使用前必须明确其值,否则其值不可预料
|
不能对寄存器变量取地址操作
|
变量作用域冲突规则:
当标识符的作用域发生重叠时,在一个函数(或块)中声明的标识符可以屏蔽函数(或块)外声明的标识符或全局标识符。