小编典典

何时在 C++ 中使用 extern

all

我正在阅读“Think in C++”,它只是介绍了extern声明。例如:

extern int x;
extern float y;

我想我理解它的含义(没有定义的声明),但我想知道它什么时候证明有用。

有人可以提供一个例子吗?


阅读 173

收藏
2022-03-13

共1个答案

小编典典

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

澄清一下, usingextern int x;告诉编译器类型int为的对象x存在 某处
。知道它存在于哪里不是编译器的工作,它只需要知道类型和名称,这样它就知道如何使用它。编译完所有源文件后,链接器将解析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"

// since global_x still needs to be defined somewhere,
// we define it (for example) in this source file
int 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;
}
2022-03-13