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声明都能成功引用。