extern关键字的使用
时间: 2024-10-10 17:10:40 浏览: 34
extern关键字在C/C++中主要用于声明已经存在于其他源文件中的变量、函数或常量。其主要作用是:
1. **声明而不是定义**[^1]:在当前文件中,你可以使用`extern`来告诉编译器你知道某个变量或函数存在,但实际的定义(初始化或函数体)在另一个文件里。
```c
extern int globalVariable; // 声明全局变量globalVariable
```
2. **避免重复定义**:如果你在一个文件中定义了一个全局变量,而在另一个文件中也试图定义同名的变量,那么在链接阶段会报错。使用`extern`声明就不会重复定义。
3. **模块化编程**[^2]:通过`extern`可以在不同源文件间共享数据,提高代码复用性。
例如,如果`main.cpp`需要调用`devVar.c`里的`i`和`func()`,可以在`main.cpp`这样写:
```cpp
// main.cpp
#include "devVar.h" // 包含头文件,其中声明了extern的变量和函数
int main() {
extern int globalVariable;
extern void func();
globalVariable = 10; // 虽然未定义,但知道其存在
func(); // 函数调用同样如此
return 0;
}
```
这里的关键点在于,`#include "devVar.h"`引入了声明,而实际的变量和函数定义在`devVar.c`中。
相关问题
extern关键字
在C++中,extern关键字用于声明一个变量或函数是在其他文件中定义的。它告诉编译器在当前文件中不需要为该变量或函数分配内存空间,而应该去其他文件中寻找它的定义。如果在其他文件中找不到该变量或函数的定义,编译器就会报链接错误。
extern关键字通常用于以下两种情况:
1. 声明一个全局变量:当我们在一个文件中声明一个全局变量,但是要在另一个文件中使用该变量时,需要使用extern关键字来告诉编译器该变量是在其他文件中定义的。
2. 声明一个函数:当我们在一个文件中声明一个函数,但是要在另一个文件中调用该函数时,需要使用extern关键字来告诉编译器该函数是在其他文件中定义的。
例如,下面的代码演示了如何在C++中使用extern关键字:
```c++
// file1.cpp
#include <iostream>
extern int count; // 声明一个全局变量
void foo() {
std::cout << "count = " << count << std::endl; // 使用全局变量
}
// file2.cpp
int count = 0; // 定义一个全局变量
int main() {
foo(); // 输出:count = 0
count++;
foo(); // 输出:count = 1
return 0;
}
```
在这个例子中,我们在file1.cpp中声明了一个全局变量count,并在函数foo中使用它。在file2.cpp中定义了全局变量count,并在main函数中调用foo函数。由于count是一个全局变量,它可以在不同的文件中使用。因此,在声明全局变量count时,使用了extern关键字告诉编译器该变量是在其他文件中定义的。
extern 关键字
引用中提到了extern关键字在C语言中的使用。extern关键字在变量名时,用于声明全局变量并指示其在外部定义。如果变量没有extern修饰且没有显式的初始化,就会成为变量的定义,因此此时必须加上extern关键字。
而在函数中,extern关键字同样可以用于函数的声明,表示该函数是在外部定义的。在头文件中声明函数时,加与不加extern都是一样的意思,都是声明函数而不是定义函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [extern关键字](https://blog.csdn.net/apple_51801179/article/details/125758014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [extern 关键字说明](https://blog.csdn.net/lqy971966/article/details/118017369)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文