c++中 extern 的含义和基本用法

简介:

在网上看到一个非常好的讲解。

用例子给你示范 
// 1.cpp 
int x = 10; 
// 2.cpp 注意没有包含1.cpp 
#include <iostream> 
using namespace std; 
extern int x;
int main () 
{ cout << x << endl; } 
//则输出10 
两个文件同在一个项目(project)中,你不包含某个文件(cpp)而可以用它内部定义的变量,(里是.pp不是.h, 因为在.h中定义的数据不能在.cpp中用除非这个.cpp包含这个.h文件) 
例: 
// 1.h 
#include <iostream> 
void print() 
{ 
std::cout << "hello!" << std::endl; 
} 
// 2.cpp 
#include <iostream> 
using namespace std; 
// 以上两句在这个例子中可以不要 
extern void print(); 
int main () 
{ 
print(); 
} 
就会出错因为1.h中的void print();在不包含它的文件中是不可调用的,即使在声明了extern 也于事无补,如果你将这个例子中的1.h名字换成1.cpp就对了! 
从这些可以看出来,extern在这里起的作用是告诉编译器,你这个print()已经在某个.cpp中已经定义了,这里只不过是声明一下有这个东西,然后拿来用一下。定义只能出现一次,声明却可出现多次,也就是说extern声明可在多个文件中用(包括.h) 
还有,你还可以屏蔽extern声明,如第二个例子中的第二个.cpp文件可以改成 
#include <iostream> 
using namespace std; 
// 这里以上两句不能省略,因为,这里extern void print();函数已经不起作用了,在这里调用的而是本文件中定义的void print()函数,其中用到了cout,endl;他们来源于std::<iostream> 
extern void print(); 
void print() 
{ 
cout << "world!" << endl; 
} 

int main () 
{ 
print(); 
} 
// 输出结果为world! 
还有一个extern "C"就不用说了,用这个可以允许C++程序中调用C的函数!



相关文章
|
存储 编译器 C语言
详解C/C++中的static和extern
本文详解了C/C++中`static`和`extern`关键字的用法和区别,通过具体代码示例说明了在不同情境下如何正确使用这两个关键字,以及`extern "C"`在C++中用于兼容C语言库的特殊作用。
516 4
详解C/C++中的static和extern
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
338 3
【C++】map、set基本用法
第十三问:C++中静态变量的用法有哪些?
本文介绍了 C++ 中静态变量和函数的用法及原理。静态变量包括函数内的静态局部变量和类中的静态成员变量,前者在函数调用间保持值,后者属于类而非对象。静态函数不能访问非静态成员,但可以通过类名直接调用。静态链接使变量或函数仅在定义文件内可见,避免命名冲突。
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
|
C++
C++ string中的函数和常用用法
C++ 中string中的函数和常用用法
311 4
|
存储 C++
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
186 7
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
186 0
|
存储 人工智能 C++
map容器在C++中的具体用法以及相关注意点
map容器在C++中的具体用法以及相关注意点
337 1
|
存储 C++ 容器
C++标准库容器的基本用法
C++标准库容器的基本用法
232 0