作用域
代码块作用域
int a; //1
int d(int e)
{
int a; //2
int b;
}
在代码块({}内)所定义的变量只有在该代码块里面的代码被访问,具有代码块作用域
,如果与外层的变量名字相同,则会将外层变量隐藏,即上述代码中注释2的变量a将覆盖注释1的变量a
文件作用域
存在与代码块之外定义的变量和函数名都具有文件作用域
,这些变量从它自己声明开始所在行到文件结尾都能被访问到
原型作用域
函数原型中声明的参数名
int b(int c)
{
...
}
c即具有原型作用域
函数作用域
链接属性
一共有三种链接属性:external、internal、none
默认会为文件作用域的变量添加external链接属性
internal
属于internal链接属性的标识符在同一个源文件内所有声明中都指同一个实体,位于不同源文件的多个声明则分属不同的实体
static int b;
int foo()
{
}
只有对链接属性为external的变量使用才有效果
external
属于external链接属性的标识符不论声明多少次、位于几个源文件都表示同一个实体
int foo()
{
int j;
extern int k; //表示k源于其他源文件
}
存储类型
auto
在代码块内部声明的变量默认存储类型为auto
,存储于堆栈中。当一个函数执行时,变量则会创建。函数执行完成则自动消亡。
static
静态变量在程序运行之前创建并程序执行过程中一直存在,直到程序执行完成。
若为代码块内部变量添加static
关键字,则将存储类型修改为静态,
网友评论