共计 976 个字符,预计需要花费 3 分钟才能阅读完成。
在 C 语言中,修饰符 extern 用在变量或者函数的申明前,用来阐明“此变量 / 函数是在别处定义的,要在此处援用”。
- extern 润饰变量的申明。举例来说,如果文件 a.c 须要援用 b.c 中变量 int v,就能够在 a.c 中申明 extern int v,而后就能够援用变量 v。这里须要留神的是,被援用的变量 v 的链接属性必须是外链接(external)的,也就是说 a.c 要援用到 v,不只是取决于在 a.c 中申明 extern int v,还取决于变量 v 自身是可能被援用到的。这波及到 c 语言的另外一个话题--变量的作用域。可能被其余模块以 extern 修饰符援用到的变量通常是全局变量。还有很重要的一点是,extern int v 能够放在 a.c 中的任何中央,比方你能够在 a.c 中的函数 fun 定义的结尾处申明 extern int v,而后就能够援用到变量 v 了,只不过这样只能在函数 fun 作用域中援用 v 罢了,这还是变量作用域的问题。对于这一点来说,很多人应用的时候都心存顾虑。如同 extern 申明只能用于文件作用域似的。
- extern 润饰函数申明。从实质上来讲,变量和函数没有区别。函数名是指向函数二进制块结尾处的指针。如果文件 a.c 须要援用 b.c 中的函数,比方在 b.c 中原型是 int fun(int mu),那么就能够在 a.c 中申明 extern int fun(int mu),而后就能应用 fun 来做任何事件。就像变量的申明一样,extern int fun(int mu)能够放在 a.c 中任何中央,而不肯定非要放在 a.c 的文件作用域的范畴中。对其余模块中函数的援用,最罕用的办法是蕴含这些函数申明的头文件。应用 extern 和蕴含头文件来援用函数有什么区别呢?extern 的援用形式比蕴含头文件要简洁得多!extern 的应用办法是直接了当的,想援用哪个函数就用 extern 申明哪个函数。这大略是 KISS 准则的一种体现吧!这样做的一个显著的益处是,会减速程序的编译(确切的说是预处理)的过程,节省时间。在大型 C 程序编译过程中,这种差别是非常明显的。
- 此外,extern 修饰符可用于批示 C 或者 C++函数的调用标准。比方在 C++中调用 C 库函数,就须要在 C++程序中用 extern“C”申明要援用的函数。这是给链接器用的,通知链接器在链接的时候用 C 函数标准来链接。次要起因是 C++和 C 程序编译实现后在指标代码中命名规定不同。
正文完