📅  最后修改于: 2023-12-03 14:40:27.777000             🧑  作者: Mango
在C语言中,链接(Linking)是指将多个源文件编译后链接成一个可执行文件或库文件的过程。链接分为内部链接(Internal Linkage)和外部链接(External Linkage)两种,下面我们一一介绍。
定义在一个函数或文件内部的变量或函数具有内部链接。内部链接的变量或函数只能在定义它们的函数或文件中使用,其他的函数或文件无法访问到。
例如,下面的代码定义了一个具有内部链接的静态变量:
//file1.c
#include <stdio.h>
void func1();
int main() {
func1();
return 0;
}
void func1() {
static int num = 0; //具有内部链接的静态变量
num++;
printf("num = %d\n", num);
}
运行程序后输出:
num = 1
这是因为在func1
函数内部定义了一个具有内部链接的静态变量num
,每次调用func1
函数时,num
变量的值都会+1。
定义在一个文件中,但是可以被其他文件调用的变量或函数具有外部链接。外部链接的变量或函数可以被其他文件使用。
例如,下面的代码定义了一个具有外部链接的全局变量:
//file1.c
#include <stdio.h>
void func1();
int num = 0; //具有外部链接的全局变量
int main() {
func1();
return 0;
}
void func1() {
num++;
printf("num = %d\n", num);
}
此时如果我们想在另一个文件中使用num
变量,需要使用extern关键字进行声明:
//file2.c
#include <stdio.h>
extern int num; //声明外部链接的全局变量
void func2() {
printf("num = %d\n", num);
}
注意,在进行链接时,需要将file1.c
和file2.c
编译后再进行链接:
$ gcc file1.c -c
$ gcc file2.c -c
$ gcc file1.o file2.o -o main
$ ./main
num = 1
num = 1
这是因为我们在file1.c
中定义了num
变量,并在file2.c
中声明了num
变量,链接时会将这两个变量链接起来。
内部链接的变量或函数只能在定义它们的函数或文件中使用,而外部链接的变量或函数则可以被其他文件调用。在进行链接时,需要将所有需要链接的源文件编译后再进行链接,否则会出现undefined reference错误。