extern在c++中
时间: 2025-06-24 18:34:54 浏览: 12
### 关于 C++ 中 `extern` 关键字的用法
在 C++ 编程语言中,`extern` 是一种用于声明变量或函数的关键字。它的主要作用是指明某个变量或者函数是在其他地方定义的,在当前文件中仅作引用之用[^1]。
#### 1. **外部变量声明**
当多个源文件共享同一个全局变量时,可以在其中一个文件中定义该变量,并通过 `extern` 声明让其他文件访问它。例如:
```cpp
// FileA.cpp
int globalVar = 10;
// FileB.cpp
extern int globalVar; // 声明而非定义
void useGlobalVar() {
std::cout << "Value of global variable is: " << globalVar << std::endl;
}
```
这里需要注意的是,只有在一个文件中实际分配内存空间(即定义),而在其他文件中只是声明它们的存在即可[^2]。
#### 2. **跨模块链接函数**
对于一些特殊情况下需要显式告诉编译器某函数是从别的地方导入的情况也可以使用 extern 来修饰这些函数原型说明语句:
```cpp
// In another library or object file.
double computePi();
// Current source file where we want to call above function without redefining it here.
extern double computePi();
void printPi(){
cout<<computePi()<<endl;// Calls the external definition from elsewhere.
}
```
以上例子展示了如何利用 extern 实现不同翻译单元之间的交互操作[^3]。
---
### 解决方案:C1083 错误——无法打开头文件 `SZLHMessage.h`
C1083 错误通常表明编译过程中未能定位到所需的 `.h` 头文件。以下是几种常见的解决办法:
#### 方法一:核实文件路径无误
确保目标头文件确实位于预期目录下,并且拼写完全正确(区分大小写字母)[^4]。
#### 方法二:更新项目设置中的包含路径
如果已知确切位置却依旧找不到,则很可能是项目的“附加包含目录”里缺少相应条目。具体做法如下:
- 在 Microsoft Visual Studio 环境内右键点击工程名-> 属性(Property);
- 导航至【Configuration Properties】> 【C/C++】 > 【General】节点下的 Additional Include Directories 字段追加上层目录地址[^5];
比如假如您的自定义类头处于 D:\Projects\Libraries 下面的话就填入这个绝对盘符开头字符串进去。
#### 方法三:采用相对路径代替固定全限定名
有时候为了提高可移植性和灵活性建议尽量少依赖硬编码式的完整路经表述形式而是改用基于工作区根部起始计算出来的逻辑关系表达方式来指示资源所在地点[^6]。
---
### 示例代码展示
下面给出一段综合运用了前面提到知识点的小型案例供参考学习:
```cpp
/* CommonHeader.h */
#ifndef COMMONHEADER_H_
#define COMMONHEADER_H_
namespace SharedSpace{
extern const char* sharedStringLiteral ;
}
#endif /*COMMONHEADER_H_*/
/* ImplementationFile.cpp */
#include "CommonHeader.h"
using namespace SharedSpace ;
const char *sharedStringLiteral="This string can be accessed across multiple translation units via 'extern' keyword.";
/* AnotherSourceFile.cpp */
#include <iostream>
#include "CommonHeader.h"
int main(){
using namespace std ;
cout<<"Accessing externally defined constant:"<<SharedSpace::sharedStringLiteral<<'\n';
return EXIT_SUCCESS ;
}
```
上述片段清晰地体现了借助 extern 完成数据成员共享的过程[^7]。
---
阅读全文
相关推荐

















