.c文件中的extern
时间: 2024-04-24 17:26:47 浏览: 92
extern是一种关键字,用于在C语言中声明一个变量或函数是在其他源文件中定义的。当在一个源文件中使用extern声明一个变量或函数时,它告诉编译器该变量或函数的定义将在其他源文件中找到。
例如,如果在一个.c文件中使用extern声明一个变量,那么该变量的定义将在其他地方的源文件中找到。这样做可以使多个源文件共享同一个变量。
另外,extern关键字也可以用于声明全局变量或函数,以便在其他源文件中使用。这样可以避免在每个要使用的源文件中重复定义相同的全局变量或函数。
总而言之,extern关键字在C语言中用于声明一个变量或函数的定义将在其他源文件中找到。它有助于实现模块化编程和代码重用。
相关问题
如果c语言sa.c和sb.c文件中同时使用extern int a,并且同时包含对方的.h文件,那到底谁
会定义变量a呢?
在这种情况下,a的定义将取决于链接器的工作方式。如果链接器将sa.o和sb.o文件链接在一起,它将在链接时发现两个对a的定义,并报告重复定义错误。如果链接器将这两个文件分别链接到不同的可执行文件中,则每个可执行文件将具有自己的a变量的定义。
为了避免这种情况,通常建议将extern声明放在头文件中,将变量定义放在一个C文件中,并在其他C文件中包含该头文件。这样,每个C文件中只有一个变量定义,链接器就不会报重复定义错误了。
extern int 在.h文件中声明了在.c文件中怎么用
在C语言中,当你想在一个`.c`源文件中引用一个在`.h`头文件中声明的全局变量(包括静态全局变量),你需要使用`extern`关键字。`.h`文件中的声明通常是这样的:
```c
// my_header.h
extern int global_variable;
```
然后,在`.c`文件中,如果这个变量还没有被初始化,通常会像这样声明并分配内存:
```c
// my_file.c
#include "my_header.h"
int global_variable; // 如果是在这里首次声明并初始化
int main() {
// 现在可以直接使用global_variable,但实际数值未定,可能需要在某个地方初始化
global_variable = some_initial_value;
return 0;
}
```
如果你在`.c`文件中已经对这个变量进行了定义,那么在`.h`文件中就不需要再声明了,但在头文件中保留`extern`声明有助于保持接口的一致性:
```c
// my_file.c
#include "my_header.h"
int global_variable = some_initial_value; // 实际的变量定义
int main() {
// 直接使用
return 0;
}
```
记住,每次修改`global_variable`的值都会影响所有链接到该文件的其他部分。因此,外部链接的`extern int`应尽可能地减少,以防数据不一致。
阅读全文