在C+中何时使用Extern

在C+中何时使用Extern

我正在阅读“在C+中思考”,它刚刚介绍了extern申报。例如:

extern int x;extern float y;

我想我理解这个意思(没有定义的声明),但我不知道它什么时候被证明是有用的。

有人能举个例子吗?


FFIVE
浏览 426回答 3
3回答

大话西游666

当您有全局变量时,这是很有用的。你宣布存在性对于头文件中的全局变量,以便每个包含头的源文件都知道它,但是您只需要在其中一个源文件中“定义”它一次。澄清,使用extern int x;告诉编译器,类型为int叫x存在某地..它不是编译器的工作,它知道它的存在,它只需要知道类型和名称,以便它知道如何使用它。一旦编译完所有源文件,链接器将解析x到它在其中一个编译源文件中找到的一个定义。为使其正常工作,定义了x变量需要有所谓的“外部链接”,这基本上意味着它需要在函数之外声明(通常称为“文件范围”),而不需要static关键词。标题:#ifndef&nbsp;HEADER_H#define&nbsp;HEADER_H//&nbsp;any&nbsp;source&nbsp;file&nbsp;that&nbsp;includes&nbsp;this&nbsp;will&nbsp;be&nbsp;able&nbsp;to&nbsp;use&nbsp;"global_x"extern&nbsp;int&nbsp;global_x;void&nbsp;print_global_x();#endif来源1:#include&nbsp;"header.h"//&nbsp;it&nbsp;needs&nbsp;to&nbsp;be&nbsp;defined&nbsp;somewhereint&nbsp;global_x;int&nbsp;main(){ &nbsp;&nbsp;&nbsp;&nbsp;//set&nbsp;global_x&nbsp;here: &nbsp;&nbsp;&nbsp;&nbsp;global_x&nbsp;=&nbsp;5; &nbsp;&nbsp;&nbsp;&nbsp;print_global_x();}来源2:#include&nbsp;<iostream>#include&nbsp;"header.h"void&nbsp;print_global_x(){ &nbsp;&nbsp;&nbsp;&nbsp;//print&nbsp;global_x&nbsp;here: &nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;<<&nbsp;global_x&nbsp;<<&nbsp;std::endl;}

呼如林

当您在几个模块之间共享一个变量时,它非常有用。您在一个模块中定义它,在其他模块中使用Extern。例如:在file1.cpp中:int&nbsp;global_int&nbsp;=&nbsp;1;在file2.cpp中:extern&nbsp;int&nbsp;global_int;//in&nbsp;some&nbsp;functioncout&nbsp;<<&nbsp;"global_int&nbsp;=&nbsp;"&nbsp;<<&nbsp;global_int;

梦里花落0921

一切都是关于联动.以前的答案给出了很好的解释extern.但我想补充一点。你问我extern在……里面C+不在C我不知道为什么没有人提到这个案子extern随const在C+中。在C+中,aconst变量默认具有内部链接(不像C)。所以这个场景会导致连接误差:来源1:const&nbsp;int&nbsp;global&nbsp;=&nbsp;255;&nbsp;//wrong&nbsp;way&nbsp;to&nbsp;make&nbsp;a&nbsp;definition&nbsp;of&nbsp;global&nbsp;const&nbsp;variable&nbsp;in&nbsp;C++来源2:extern&nbsp;const&nbsp;int&nbsp;global;&nbsp;//declaration它必须是这样的:来源1:extern&nbsp;const&nbsp;int&nbsp;global&nbsp;=&nbsp;255;&nbsp;//a&nbsp;definition&nbsp;of&nbsp;global&nbsp;const&nbsp;variable&nbsp;in&nbsp;C++来源2:extern&nbsp;const&nbsp;int&nbsp;global;&nbsp;//declaration
打开App,查看更多内容
随时随地看视频慕课网APP