为了账号安全,请及时绑定邮箱和手机立即绑定

在C+中何时使用Extern

在C+中何时使用Extern

C++
FFIVE 2019-06-28 15:30:16
在C+中何时使用Extern我正在阅读“在C+中思考”,它刚刚介绍了extern申报。例如:extern int x;extern float y;我想我理解这个意思(没有定义的声明),但我不知道它什么时候被证明是有用的。有人能举个例子吗?
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

当您有全局变量时,这是很有用的。你宣布存在性对于头文件中的全局变量,以便每个包含头的源文件都知道它,但是您只需要在其中一个源文件中“定义”它一次。

澄清,使用extern int x;告诉编译器,类型为intx存在某地..它不是编译器的工作,它知道它的存在,它只需要知道类型和名称,以便它知道如何使用它。一旦编译完所有源文件,链接器将解析x到它在其中一个编译源文件中找到的一个定义。为使其正常工作,定义了x变量需要有所谓的“外部链接”,这基本上意味着它需要在函数之外声明(通常称为“文件范围”),而不需要static关键词。

标题:

#ifndef HEADER_H#define HEADER_H// any source file that includes this will be able to use "global_x"extern int global_x;void print_global_x();#endif

来源1:

#include "header.h"// it needs to be defined somewhereint global_x;int main(){
    //set global_x here:
    global_x = 5;

    print_global_x();}

来源2:

#include <iostream>#include "header.h"void print_global_x(){
    //print global_x here:
    std::cout << global_x << std::endl;}


查看完整回答
反对 回复 2019-06-28
?
呼如林

TA贡献1798条经验 获得超3个赞

当您在几个模块之间共享一个变量时,它非常有用。您在一个模块中定义它,在其他模块中使用Extern。

例如:

在file1.cpp中:

int global_int = 1;

在file2.cpp中:

extern int global_int;//in some functioncout << "global_int = " << global_int;


查看完整回答
反对 回复 2019-06-28
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

一切都是关于联动.

以前的答案给出了很好的解释extern.

但我想补充一点。

你问我extern在……里面C+不在C我不知道为什么没有人提到这个案子externconst在C+中。

在C+中,aconst变量默认具有内部链接(不像C)。

所以这个场景会导致连接误差:

来源1:

const int global = 255; //wrong way to make a definition of global const variable in C++

来源2:

extern const int global; //declaration

它必须是这样的:

来源1:

extern const int global = 255; //a definition of global const variable in C++

来源2:

extern const int global; //declaration


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 422 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信