c语言extern的使用
时间: 2024-06-22 09:03:08 浏览: 13
在C语言中,`extern`关键字用于声明一个变量、函数或者类型在整个程序中的可见性。当你在某个文件中声明了一个变量或函数,但不想在当前文件中定义它(即提供它的具体实现),就可以使用`extern`来标记它。这样,其他文件可以在需要的地方引用这个变量或函数,即使它们还没有看到它的完整定义。
1. 变量的extern声明:
当在头文件(`.h`)中声明一个全局变量或函数,用`extern`修饰,表示该变量或函数的定义应在另一个源文件(`.c`)中。例如:
```c
extern int global_var;
```
2. 函数的extern声明:
类似地,对于函数,如果要在多个源文件中调用,可以在其中一个头文件中这样声明:
```c
extern void function_name(void);
```
3. 类型的extern声明:
如果一个类型定义在了头文件中,为了在其他文件中能够正确编译,也需要extern来声明:
```c
extern typedef some_type;
```
**相关问题--:**
1. `extern`常用于哪些场景?
2. 为什么在头文件中通常不直接定义变量或函数?
3. 如何在源文件中实际定义一个extern声明的变量或函数?
相关问题
c语言中extern使用
在C语言中,extern关键字用于声明一个变量或函数是在其他文件或模块中定义的。它的作用是告诉编译器该变量或函数在其他文件中定义,编译器在编译时不会对其进行处理,而是在链接时将其与其他文件中的定义进行链接。
下面是两个使用extern关键字的例子:
1. 声明外部函数
假设我们有两个文件,一个是main.c,另一个是func.c,func.c中定义了一个函数show(),我们需要在main.c中调用该函数,就需要使用extern关键字进行声明。
```c
// func.c代码
#include <stdio.h>
void show() {
printf("hello world");
}
// main.c代码
#include <stdio.h>
extern void show(); // 声明外部函数show()
int main() {
show(); // 调用外部函数show()
return 0;
}
```
2. 声明外部变量
假设我们有两个文件,一个是main.c,另一个是var.c,var.c中定义了一个全局变量g_val,我们需要在main.c中使用该变量,就需要使用extern关键字进行声明。
```c
// var.c代码
int g_val = 10;
// main.c代码
#include <stdio.h>
extern int g_val; // 声明外部变量g_val
int main() {
printf("%d", g_val); // 输出外部变量g_val的值
return 0;
}
```
C语言 extern
在C语言中,关键字extern用于声明一个全局变量或函数,表示该变量或函数是在其他文件中定义的。它可以用于解决多文件编程时的符号重定义问题。
当我们在一个源文件中使用extern关键字声明一个变量或函数时,它告诉编译器该变量或函数是在其他文件中定义的,编译器会在链接阶段将其与实际定义进行连接。
例如,我们有两个源文件file1.c和file2.c。在file1.c中定义了一个全局变量x,我们希望在file2.c中也能够使用这个变量。我们可以在file2.c中使用extern关键字声明变量x,编译器会在链接阶段将两个文件中的x连接起来。
file1.c:
```c
int x = 10;
```
file2.c:
```c
extern int x;
int main() {
printf("%d\n", x); // 输出10
return 0;
}
```
在上面的例子中,我们在file2.c中使用extern关键字声明了变量x,然后在main函数中可以直接使用x,因为编译器会将其与file1.c中定义的x连接起来。
总之,extern关键字用于声明一个全局变量或函数,并告诉编译器该变量或函数是在其他文件中定义的。这样可以避免多文件编程时的符号重定义问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)