在C语言中,`extern`关键字用于声明一个变量或函数,表示该变量或函数已在其他文件中定义,当前文件只是引用它。以下是`extern`关键字的基本用法:
全局变量声明
在文件中使用`extern`关键字声明一个全局变量,即使该变量在其他文件中定义。
示例:
```c
// File1.c
extern int global_var;
```
函数声明
在文件中使用`extern`关键字声明一个函数,即使该函数在其他文件中定义。
示例:
```c
// File1.c
extern void global_func();
```
引用同一个文件中的变量
如果一个变量在main函数的后边进行声明和初始化,那么在main函数中不能直接引用该变量,因为编译器在编译到这一句话时找不到变量的声明。此时可以使用`extern`关键字来引用该变量。
示例:
```c
// File1.c
int num = 3;
// File2.c
extern int num;
int main() {
printf("%d", num); // 可以正常使用,因为func对num的调用是发生在num的声明和初始化之后
return 0;
}
```
引用另一个文件中的变量
通过使用`extern`关键字,可以在一个文件中引用另一个文件中定义的变量。
示例:
```c
// File1.c
extern int global_var;
// File2.c
int global_var = 10;
```
在函数声明中使用外部存储类说明符
`extern`用于在函数声明中指定函数的存储类说明符为`extern`,以确保函数在链接时使用外部定义的函数,而不是当前文件中的定义。
示例:
```c
// File1.c
extern int add(int a, int b);
// File2.c
int add(int a, int b) {
return a + b;
}
```
extern与C语言代码交互
当在C++代码中需要调用C语言编写的函数或使用C语言的库时,可以使用`extern "C"`来确保C++编译器按照C语言的函数名和调用规则来处理这些部分。
示例:
```cpp
// File1.cpp
extern "C" {
void c_function(int arg);
}
// File2.c
void c_function(int arg) {
// C语言函数实现
}
```
总结起来,`extern`关键字在C语言中的主要作用是声明一个变量或函数,表示它们已在其他文件中定义,从而在当前文件中进行引用。通过使用`extern`,可以实现跨文件的变量和函数共享,提高代码的模块化和可重用性。