我正在阅读“Think in C++”,它只是介绍了extern
声明。例如:
extern int x;
extern float y;
我想我理解它的含义(没有定义的声明),但我想知道它什么时候证明有用。
有人可以提供一个例子吗?
我正在阅读“Think in C++”,它只是介绍了extern
声明。例如:
extern int x;
extern float y;
我想我理解它的含义(没有定义的声明),但我想知道它什么时候证明有用。
有人可以提供一个例子吗?
当您有全局变量时,这很有用。您在头文件中声明全局变量的存在,以便包含头文件的每个源文件都知道它,但您只需要在您的一个源文件中“定义”一次。
澄清一下, 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
#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();
}
#include <iostream>
#include "header.h"
void print_global_x()
{
//print global_x here:
std::cout << global_x << std::endl;
}
当您在几个模块之间共享一个变量时,它很有用。您在一个模块中定义它,并在其他模块中使用 extern。
例如:
在 file1.cpp 中:
int global_int = 1;
在 file2.cpp 中:
extern int global_int;
//in some function
cout << "global_int = " << global_int;
这都是关于联动的。
先前的答案提供了关于extern
.
但我想补充一点。
你问的是extern
在C++中,而不是在C中,我不知道为什么在 C++ 中没有提到这种情况的extern
答案const
。
在 C++ 中,const
变量默认具有内部链接(不像 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
当您想要拥有一个全局变量时,这很有用。您在某个源文件中定义全局变量,并在头文件中将它们声明为 extern,这样任何包含该头文件的文件都将看到相同的全局变量。