1、extern 的作用
extern
通常用于声明全局变量或函数,声明告诉编译器变量存在但不在当前文件中定义。变量的实际定义(即内存分配)应该在某个源文件中,而其他需要使用该变量的源文件则通过 extern
关键字进行声明。
有两个源文件:file1.c
和 file2.c
。我们希望在 file2.c
中访问 file1.c
中定义的全局变量 counter
。
1)在 file1.c 中定义变量
// file1.c
#include <stdio.h>
int counter = 0; // 变量的定义(内存分配)
void increment() {
counter++;
printf("Counter: %d\n", counter);
}
注意:counter
是一个全局变量,定义在 file1.c
中,它的内存分配也在这里完成。
2)在 file2.c 中声明变量
// file2.c
#include <stdio.h>
extern int counter; // 变量的声明
void printCounter() {
printf("Counter from file2.c: %d\n", counter);
}
注意:file2.c
中,使用 extern
声明 counter
变量。告诉编译器 counter
变量已经在其他文件中定义,这里只是引用它。
3)创建 main.c 并链接两个源文件
// main.c
#include <stdio.h>
void increment();
void printCounter();
int main() {
increment(); // 调用 file1.c 中的函数,增加 counter 的值
printCounter(); // 调用 file2.c 中的函数,打印 counter 的值
return 0;
}
2、编译并链接
编译这三个文件时,需要将它们一起编译和链接,
gcc main.c file1.c file2.c -o myprogram
注意:生成一个名为 myprogram
的可执行文件。运行程序时,file1.c
中的 increment()
函数会增加 counter
的值,而 file2.c
中的 printCounter()
函数会读取并打印这个值。
3、extern 的使用示例
extern
关键字用于声明一个全局变量或函数,而不是定义它。它的主要作用是在不同文件之间共享变量或函数,使得可以在一个文件中引用另一个文件中定义的全局变量或函数。创建3个文件,main.c
主程序入口,用于引用在 variables.c
中定义的变量。variables.c
包含全局变量的定义和函数实现。variables.h
包含变量和函数的声明。
1)variables.h
variables.h
是头文件,用于声明全局变量 sharedVar
和函数 displaySharedVar
,以便其他文件可以引用它们。
// variables.h
#ifndef VARIABLES_H
#define VARIABLES_H
// 使用 extern 声明一个全局变量
extern int sharedVar;
// 使用 extern 声明一个函数
extern void displaySharedVar();
#endif // VARIABLES_H
2)variables.c
variables.c
中定义了全局变量 sharedVar
并实现了 displaySharedVar
函数。
// variables.c
#include "variables.h"
#include <stdio.h>
// 定义全局变量
int sharedVar = 42;
// 定义函数
void displaySharedVar() {
printf("The value of sharedVar is: %d\n", sharedVar);
}
3)main.c
main.c
中引用了 variables.h
,可以直接访问 sharedVar
和调用 displaySharedVar
函数。
// main.c
#include <stdio.h>
#include "variables.h"
int main() {
// 调用 displaySharedVar 函数
displaySharedVar();
// 修改 sharedVar 的值
sharedVar = 100;
// 再次调用 displaySharedVar 函数
displaySharedVar();
return 0;
}