C语言——链接属性,变量作用域、存储类型

作用域

代码块作用域

int a; //1

int d(int e)
{
  int a; //2
  int b;
}

在代码块({}内)所定义的变量只有在该代码块里面的代码被访问,具有代码块作用域,如果与外层的变量名字相同,则会将外层变量隐藏,即上述代码中注释2的变量a将覆盖注释1的变量a

文件作用域

存在与代码块之外定义的变量和函数名都具有文件作用域,这些变量从它自己声明开始所在行到文件结尾都能被访问到

原型作用域

函数原型中声明的参数名

int b(int c)
{
...
}

c即具有原型作用域

函数作用域


链接属性

一共有三种链接属性:externalinternalnone

默认会为文件作用域的变量添加external链接属性

internal

属于internal链接属性的标识符在同一个源文件内所有声明中都指同一个实体,位于不同源文件的多个声明则分属不同的实体

static int b;
int foo()
{
}

只有对链接属性为external的变量使用才有效果

external

属于external链接属性的标识符不论声明多少次、位于几个源文件都表示同一个实体

int foo()
{
  int j;
  extern int k; //表示k源于其他源文件
}

存储类型

auto

在代码块内部声明的变量默认存储类型为auto,存储于堆栈中。当一个函数执行时,变量则会创建。函数执行完成则自动消亡。

static

静态变量在程序运行之前创建并程序执行过程中一直存在,直到程序执行完成。
若为代码块内部变量添加static关键字,则将存储类型修改为静态,

register

你可能感兴趣的:(C语言——链接属性,变量作用域、存储类型)