Back to Blog

C语言中extern的用法

#语言#c#fun

在 C 语言中,修饰符 extern 用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

2.2 链接属性必须是外部链接

这里需要注意的是,被引用的变量 v 的链接属性必须是外链接(external)的,也就是说 a.c 要引用到 v,不只是取决于在 a.c 中声明 extern int v,还取决于变量 v 本身是能够被引用到的。这涉及到 C 语言的另外一个话题——变量的作用域。能够被其他模块以 extern 修饰符引用到的变量通常是 全局变量(文件作用域的对象),因为局部变量(函数内部的自动变量)没有外部链接属性。

2.3 声明位置的灵活性

还有很重要的一点是,extern int v 可以放在 a.c 中的任何地方,比如你可以在 a.c 中的函数 fun 定义的开头处声明 extern int v,然后就可以引用到变量 v 了,只不过这样只能在函数 fun 作用域中引用 v 罢了,这还是变量作用域的问题。对于这一点来说,很多人使用的时候都心存顾虑。好像 extern 声明只能用于文件作用域似的。

要点

  • 文件作用域:在文件顶部(任何函数之外)声明的 extern,在整个文件内都可见。
  • 块作用域:在函数内部声明的 extern,仅在该块(函数体)内部可见。
  • 链接属性:只要变量本身是外部链接(即非 static),任何位置的 extern 声明都能成功引用。

3. extern 修饰函数的声明

3.1 基本示例