C 语言中,extern 关键字用于声明一个变量或函数是外部定义的。这通常用于在多个文件之间共享变量或函数的声明,而不是定义它们。extern 告诉编译器该变量或函数在程序的其他地方已经定义。通过正确使用 extern,可以在多个文件之间共享数据和功能,确保程序结构清晰且易于管理。

1、用于声明外部变量

extern 关键字通常用于声明一个在其他文件中定义的全局变量。如有多个源文件,其中一个源文件定义了变量,其他源文件可以使用 extern 来访问它。

1)file1.c - 定义全局变量

#include <stdio.h>

int globalVar = 10;  // 定义全局变量

int main() {
    printf("Global variable in file1.c: %d\n", globalVar);  // 访问全局变量
    return 0;
}

2)file2.c - 声明外部变量并访问

#include <stdio.h>

extern int globalVar;  // 声明在其他文件中定义的外部变量

void printGlobalVar() {
    printf("Global variable in file2.c: %d\n", globalVar);  // 访问外部变量
}

int main() {
    printGlobalVar();  // 调用函数打印全局变量
    return 0;
}

file1.c 中,globalVar 被定义并初始化为 10。在 file2.c 中,通过 extern 声明 globalVar,告诉编译器该变量在其他地方已定义。

2、用于声明外部函数

extern 也可以用于声明在其他文件中定义的函数。这对于跨多个文件共享函数非常有用。

1)file1.c

#include <stdio.h>

void myFunction() {
    printf("Hello from myFunction!\n");
}

2)file2.c

#include <stdio.h>

// 声明在其他文件中定义的外部函数
extern void myFunction();

int main() {
    myFunction();  // 调用 myFunction,实际执行的是 file1.c 中定义的函数
    return 0;
}

3、extern 与 static 的区别

extern 用于声明外部的变量或函数,表示它们可以在程序的其他文件中使用。static 用于声明一个局部变量或函数,表示它们只能在当前文件或函数内访问,不能在外部文件中引用。

1)file1.c

#include <stdio.h>

static int staticVar = 5;  // static 变量,仅在 file1.c 中可见

int globalVar = 10;        // globalVar 可以在其他文件中访问

void printVariables() {
    printf("staticVar = %d\n", staticVar);
    printf("globalVar = %d\n", globalVar);
}

2)file2.c

#include <stdio.h>

// 声明来自 file1.c 的 globalVar
extern int globalVar;

// 声明来自 file1.c 的函数
extern void printVariables();

int main() {
    // 访问来自 file1.c 的 globalVar
    printf("globalVar from file2.c = %d\n", globalVar);

    // 调用来自 file1.c 的函数
    printVariables();

    return 0;
}

推荐文档