C语言中的作用域

152 阅读1分钟

作用域这个概念在每一种语言中都有,且每种语言的作用域概念大同小异,C语言可能是这些作用域实现的鼻祖吧。

作用域分类

  1. 函数作用域
  2. 文件作用域
  3. 块作用域
  4. 函数原型作用域

函数作用域

函数作用域,标识符能够在整个函数中都生效,只有语句标号属于函数作用域。标号在函数中不需要预先声明后使用,在前面可以使用goto语句跳转到后面的标识中,但这也只能够在一个函数中。

文件作用域

文件作用域可以类比为其他语言的模块机制。标识符从它开始声明到整个程序的末尾都是有效的,声明文件作用域的方式有两种,一种是通过static 标识变量只能够在单文件中使用,而不使用static修饰的变量可被外部文件使用。该使用方式也可称为外部链接,在编译时遇到external关键字时会暂时跳过,链接时会被重新查找。

块作用域

块也就是{},标识在{}的内部声,也只能在内部引用,离开{}则销毁,外部块作用域不能使用内部块作用域的变量,但是内部块作用域可使用外部作用域声明的变量。

函数原型作用域

标识符出现在函数原型中。这个原型只是一个声明而不是定义,则该函数从声明的地方到文件末尾都是可以使用的。