大家好!我是兔飞飞女士!今天学习extern!
在C和C++中,extern关键字的作用可以总结为“告诉编译器这个变量或者函数是定义在别的地方的,我这里只是声明它”。它主要用来处理跨文件共享变量或函数的场景。
用人话解释
-
全局变量跨文件使用:
想象你在两个文件中工作,一个叫file1.cpp,一个叫file2.cpp。如果你在file1.cpp中定义了一个变量,比如:int sharedVar = 42; // 定义然后你希望在
file2.cpp中用这个变量,你不能直接写sharedVar,因为编译器不知道它是从哪里来的。
这时,你需要在file2.cpp中加一行:extern int sharedVar; // 声明这样编译器就知道
sharedVar是别的文件里定义的,链接器会帮你找到它。 -
跨文件共享函数:
对函数来说,其实默认就是extern的(不写也可以)。比如:void foo(); // 声明,默认就是 extern所以函数跨文件使用时,
extern一般不用写出来。 -
避免重复定义:
如果你在两个文件中都定义了同名全局变量,比如:// 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就像是告诉编译器:“这个变量或函数不是我这里定义的,但我知道它存在,放心去别处找”。
854

被折叠的 条评论
为什么被折叠?



