用人话解释extern

大家好!我是兔飞飞女士!今天学习extern!

在C和C++中,extern关键字的作用可以总结为“告诉编译器这个变量或者函数是定义在别的地方的,我这里只是声明它”。它主要用来处理跨文件共享变量或函数的场景。

用人话解释

  1. 全局变量跨文件使用
    想象你在两个文件中工作,一个叫file1.cpp,一个叫file2.cpp。如果你在file1.cpp中定义了一个变量,比如:

    int sharedVar = 42; // 定义
    

    然后你希望在file2.cpp中用这个变量,你不能直接写sharedVar,因为编译器不知道它是从哪里来的。
    这时,你需要在file2.cpp中加一行:

    extern int sharedVar; // 声明
    

    这样编译器就知道sharedVar是别的文件里定义的,链接器会帮你找到它。

  2. 跨文件共享函数
    对函数来说,其实默认就是extern的(不写也可以)。比如:

    void foo(); // 声明,默认就是 extern
    

    所以函数跨文件使用时,extern一般不用写出来。

  3. 避免重复定义
    如果你在两个文件中都定义了同名全局变量,比如:

    // file1.cpp
    int x = 10;
    
    // file2.cpp
    int x = 20; // 错误:重复定义
    

    编译器会报错,因为变量x被定义了两次。但如果你在file2.cpp中用extern声明,而不是重新定义:

    extern int x; // 声明,而非定义
    

    编译器就能正确处理了。

重要的补充

  • extern只是声明,不会分配内存。真正分配内存的地方是定义(没有extern且有初始化)。
  • C++中的extern "C"
    在C++里,用extern "C"可以告诉编译器,函数是用C语言的方式来编译的(而不是C++的方式)。这主要是为了让C++代码和C代码互操作。比如:
    extern "C" void foo(); // 用C的方式编译和链接
    

总结

extern就像是告诉编译器:“这个变量或函数不是我这里定义的,但我知道它存在,放心去别处找”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值