- 作用域
- 文件作用域
- 任何在所有代码块之外声明的标识符都具有文件作用域,它表示这些标识符从他们的声明之处起直至该源文件的结尾都是可以被访问的
- 函数作用域
- 代码块作用域
- 位于一对花括号之间的所有语句称为一个代码块
- 原型作用域
- 链接属性
-
- external
- internal
- 属于 internal 链接属性的标识符在同一个源文件内的所有声明都指向同一个实体,但位于不同源文件的多个声明则分属不同的实体
- none
- 没有链接属性的标识符(none)总是被当作单独的实体,也就说该标识符的多个声明会被当作多个独立不同的实体
- 下通过一个示例来展示一些默认情况:
-
- 缺省情况下标识符 b 、c、f 的链接属性为 external ,其余标识符的链接属性则为 none
- 因此如果另一个源文件也包含了标识符 b 的类似声明,并调用函数 c ,他们实际上访问的是这个源文件中所定义的实体
- f 的链接属性之所以是 external 是因为它是一个函数名,在这个源文件中调用函数 f ,它实际上将链接到其它源文件所定义的函数,甚至这个函数的定义可能出现在某个函数库中
-
- 关键字 extern 和 static 用于在声明中修改标识符的链接属性
- static
- 如果某个声明在正常情况下具有 external 链接属性,那么在其前面加上 static 关键字可以使其链接属性变位 internal ,如:
- 如果某个声明在正常情况下具有 external 链接属性,那么在其前面加上 static 关键字可以使其链接属性变位 internal ,如:
- extern
- extern 关键字为一个标识符指定 external 链接属性,这样就可以访问在任何位置定义的这个实体,下列举一简单实例:
- 声明3为 k 指定 external 链接属性,这样函数就可以访问在其他源文件所声明的外部变量了
- extern 关键字为一个标识符指定 external 链接属性,这样就可以访问在任何位置定义的这个实体,下列举一简单实例:
- static