📣🥳🥳🥳📣
✨Hello! 如果这篇【文章】对你有帮助😄,希望可以给博主点个赞👍鼓励一下😘
📣🥳🥳🥳📣
🤔 extern
的作用
1️⃣提供【按C编译】的功能
//c++函数重载,下面的写法不会报错
int func(int x); //函数声明
int func(double x); //函数声明
//c中没有函数重载机制,函数名相同会有冲突,因此下面的写法会报错
extern "C" func(int x); //函数声明,但按C规则编译
extern "C" func(double x); //函数声明,但按C规则编译
修饰声明全局变量或函数,其声明的变量和函数可以在其它模块(文件)中使用,注意,这只是一个声明而不是定义,具体的定义要在具体的模块中完成
2️⃣允许当前.cpp
文件【使用外部.cpp
文件】中定义的变量和函数
对于头文件.h
,我们用include
关键字包含进来,使其可以在预编译阶段展开使用
对于源文件.cpp
,我们可以用extern
外部声明关键字,并进行【链接编译】
随后在【终端】进行【链接编译】产生【可执行文件】.exe
👇
g++ main.cpp main2.cpp -o test
执行test.exe
👇
./test
结果如下👇
但需要注意的是,在main2.cpp
文件中定义的变量i
需是一个全局变量,否则main1.cpp
文件从extern
关键字所在位置出发后无法找到该变量,会出现报错👇
🤔 extern
+const
的使用
如果有一个【常量】要在多个文件之间共享,能否也按上面这种方式来实现呢?👇
提示未定义👇
原因是在c++中关键字const
默认情况下会将对应的对象【设定为仅在文件内有效】。因此当我们依然想要我们的程序包含main.cpp
和main2.cpp
这两个文件时(即链接编译产生可执行文件.exe
),main.cpp
中的变量i
就会出现undefined reference
现象。
那某些时候如果确实是有一个【常量】需要在文件之间共享,应该如何实现呢?《C++ Primer 5th中文版》的原文如下👇
解决的方法是,对于
const
变量不管是声明还是定义,两边都添加extern
关键字
因此,只需要在main2.cpp
文件中,在对常量i
定义时,加上extern
即可👇
链接编译👇
g++ main.cpp main2.cpp -o test
✨如有问题欢迎在底下评论留言或私信!
如果这篇【文章】对你有帮助😄,希望可以给博主【点个赞👍】鼓励一下😘
❤️Thanks for your encouragement❤️