我正在阅读“Think in C++”,它只是介绍了extern声明。例如:
extern
extern int x; extern float y;
我想我理解它的含义(没有定义的声明),但我想知道它什么时候证明有用。
有人可以提供一个例子吗?
当您有全局变量时,这很有用。您在头文件中声明全局变量的 存在 ,以便包含头文件的每个源文件都知道它,但您只需要在您的一个源文件中“定义”一次。
澄清一下, usingextern int x;告诉编译器类型int为的对象x存在 某处 。知道它存在于哪里不是编译器的工作,它只需要知道类型和名称,这样它就知道如何使用它。编译完所有源文件后,链接器将解析x对它在已编译源文件之一中找到的一个定义的所有引用。为了使它起作用,x变量的定义需要有所谓的“外部链接”,这基本上意味着它需要在函数之外(通常称为“文件范围”)声明并且没有static关键字。
extern int x;
int
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; }