c++中的extern

在C++(以及C)中,extern关键字用于声明一个变量或函数是在别的文件中定义的,或者是在当前文件的后面定义的。它告诉编译器该变量或函数是在其他地方定义的,因此编译器在编译当前文件时不会为其分配内存空间,而是会在链接阶段查找并链接到实际定义的变量或函数。

  1. 使用场景
    跨文件共享变量:当你需要在多个源文件中共享一个全局变量时,可以在一个文件中定义该变量(通常放在.cpp文件中),然后在其他需要访问这个变量的文件中使用extern关键字声明它(通常放在.h头文件中)。
// file1.cpp  
int globalVar = 10;  

// file2.h  
extern int globalVar;  

// file2.cpp  
#include "file2.h"  
void someFunction() {  
    globalVar = 20;  
}
  1. 跨文件共享函数:虽然对于函数来说,extern是隐式的(即,默认情况下,函数就是跨文件可见的),但在某些情况下,为了明确表明函数的外部链接性,或者为了与变量声明保持一致,也可以显式地使用extern来声明函数。
// file1.h  
extern void myFunction();  

// file1.cpp  
#include "file1.h"  
void myFunction() {  
    // 函数实现  
}  

// file2.cpp  
#include "file1.h"  
void anotherFunction() {  
    myFunction(); // 调用file1.cpp中定义的函数  
}

注意事项
使用extern时,需要确保变量或函数在链接时只有一个定义(One Definition Rule, ODR),但可以有多个声明。
对于模板、内联函数和静态局部变量,extern的使用方式有所不同或通常不适用。
在C++中,静态成员变量也需要在类定义外部定义一次,但不需要使用extern,而是使用类名和::作用域解析运算符来定义。
在C++17及以后的版本中,引入了inline变量,它允许在多个源文件中定义相同的变量,而不需要担心ODR问题。这与extern变量在用途上有所不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空谷传声~

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值