Asl*_*986 372 c++ variable-declaration
我正在阅读"用C++思考",它刚刚介绍了这个extern声明.例如:
extern int x;
extern float y;
Run Code Online (Sandbox Code Playgroud)
我想我理解了意义(没有定义的声明),但我想知道什么时候它有用.
有人能提供一个例子吗?
dre*_*lax 477
当你有全局变量时,它会很有用.您在标头中声明了全局变量的存在,以便包含标头的每个源文件都知道它,但您只需要在其中一个源文件中"定义"它一次.
为了澄清,使用extern 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
Run Code Online (Sandbox Code Playgroud)
#include "header.h"
// it needs to be defined somewhere
int global_x;
int main()
{
//set global_x here:
global_x = 5;
print_global_x();
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include "header.h"
void print_global_x()
{
//print global_x here:
std::cout << global_x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
MBy*_*ByD 147
在几个模块之间共享变量时,它非常有用.您可以在一个模块中定义它,并在其他模块中使用extern.
例如:
在file1.cpp中:
int global_int = 1;
Run Code Online (Sandbox Code Playgroud)
在file2.cpp中:
extern int global_int;
//in some function
cout << "global_int = " << global_int;
Run Code Online (Sandbox Code Playgroud)
Tre*_*vor 59
这完全取决于联系.
以前的答案提供了很好的解释extern.
但我想补充一点.
你问extern在C++不ç,我不知道为什么没有答案提这个案子时,extern与来自const于C++.
在C++中,const变量默认具有内部链接(不像C).
所以这种情况会导致链接错误:
来源1:
const int global = 255; //wrong way to make a definition of global const variable in C++
Run Code Online (Sandbox Code Playgroud)
来源2:
extern const int global; //declaration
Run Code Online (Sandbox Code Playgroud)
它必须是这样的:
来源1:
extern const int global = 255; //a definition of global const variable in C++
Run Code Online (Sandbox Code Playgroud)
来源2:
extern const int global; //declaration
Run Code Online (Sandbox Code Playgroud)
Mar*_*lon 13
当您想要一个全局变量时,这很有用.您可以在某个源文件中定义全局变量,并在头文件中将它们声明为extern,以便包含该头文件的任何文件都可以看到相同的全局变量.
| 归档时间: |
|
| 查看次数: |
346227 次 |
| 最近记录: |