区别是:在C语言中 extern 是关键字,global 不是。一个变量是不是 global 变量是由作用域决定的,当变量在全局作用域中声明时,这个变量就是全局变量。当 extern 修饰一个变量时,就表明这个变量并不是在这里声明的。
在C语言中 extern 是关键字,global 不是。一个变量是不是 global 变量是由作用域决定的,当变量在全局作用域中声明时,这个变量就是全局变量。
当 extern 修饰一个变量时,就表明这个变量并不是在这里声明的。比如,你在头文件里声明了一个变量,那么为了在源程序中显得清楚明白,在源程序中应该加上一个 extern 修饰的该变量的声明。extern 也可以用于前向声明(Forward Declaration)。
除了变量以外,extern 也可以修饰函数。C 语言中常见的一个错误是 unresolved externals,这常常会由没有引用库文件导致,由此可推知库文件中的函数是用 extern 修饰的。
extern在这种情形中代表需要预留一个全局可见的符号。
全局的意思是在链接阶段可以找到这个符号,因为在链接中是没有非全局的符号的(静态局部变量是不需要留符号的,只需要标明所需空间既可)。
所以extern一个符号的含义与全局变量的含义的区别就如同符号和变量的区别,它们是不同层次的,也没有间接的关系。
延伸阅读:
什么是变量?
变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。
变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变的。
在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息。例如,可以创建一个名为Click Count的变量来存储用户单击Web页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。
文章标题:C 语言中 extern 变量和 global 变量有什么区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38570