zoukankan      html  css  js  c++  java
  • C语言中extern的用法

    https://www.cnblogs.com/mch0dm1n/p/5727667.html

    https://www.cnblogs.com/codingmengmeng/p/7220119.html

    0x01

      extern用在变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

    0x02

      extern修饰变量的声明。

      举例:若a.c中需引用b.c中的变量int v,可以在a.c中声明extern int v,然后就可以引用变量v;需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到变量v,不只是取决于在a.c中声明extern int v,还取决于变量v本身是能够被引用到的。这里涉及到另外一个话题---变量的作用域。能够被其他模块以extern引用到的变量通常是全局变量。

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

    0x03

       extern修饰函数的声明。

      本质上讲,变量和函数没有区别。函数名是指向函数二进制块开头处的指针。如果文件a.c要引用b.c中的函数,比如在b.c中原型是int func(int m),那么就可以在a.c中声明extern int func(int m),然后就能使用func()来做任何事情。就像变量的声明一样,extern int func(int m)可以放在a.c中的任何位置,而不一定非要放在a.c的文件作用域的范围中,

      对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。使用extern和包含头文件来引用函数的区别:extern的引用方式比包含头文件要间接得多。extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。这大概是kiss原则的一种体现。这样做的一个明显的好处是,会加速程序的编译(确切地说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。

  • 相关阅读:
    Factorial Trailing Zeroes
    Convert Integer A to Integer B
    函数防抖、函数节流
    localstorage sessionstorage和cookie的区别
    element中表格中的表头与表格内容边框错位的解决方法
    解决Minio生成图片文件的分享链接无法正常下载的问题
    gin编写后端API的使用技巧
    YOLOV5源码解读-export.py网络结构、配置文件
    《三、YOLOV3细节原理全解析》
    《二、YOLOV2细节原理全解析》
  • 原文地址:https://www.cnblogs.com/focus-z/p/10205542.html
Copyright © 2011-2022 走看看