学习目标

  1. 理解extern的作用
  2. 掌握extern的用法

    学习内容

    extern理解

    extern是C语言中的一个关键字,用于说明一个全局变量或函数的定义不在本文件中,而在其他文件中,告诉编译器该变量或函数已经在别的文件中定义过了。

在C语言中,如果要在一个源文件中使用另一个源文件中定义的全局变量或函数,需要使用extern关键字声明一下该变量或函数,这样编译器才能知道该变量或函数已经在其他文件中定义过了。

extern变量

以下是extern关键字的用法和示例:
在一个源文件中定义全局变量,然后在另一个源文件中使用该变量:

  1. int global_var = 10;
  1. #include <stdio.h>
  2. extern int global_var; // 声明全局变量
  3. int main() {
  4. printf("%d\n", global_var); // 使用全局变量
  5. return 0;
  6. }

extern函数

在一个源文件中定义函数,然后在另一个源文件中使用该函数:

  1. int add(int a, int b) {
  2. return a + b;
  3. }
  1. extern int add(int a, int b); // 声明函数
  2. int main() {
  3. int result = add(1, 2); // 使用函数
  4. printf("%d\n", result);
  5. return 0;
  6. }

头文件中定义

需要注意的是,如果在一个源文件中定义了一个全局变量或函数,并且该变量或函数要在多个源文件中使用,那么需要将该变量或函数的定义放在一个头文件中,并在其他源文件中包含该头文件。
例如,将上面的global_varadd函数的定义放在一个头文件中:

  1. extern int global_var;
  2. extern int add(int a, int b);

然后在其他源文件中包含该头文件即可使用该变量和函数:

  1. // myimpl.c
  2. #include "myheader.h"
  3. int global_var = 10;
  4. int add(int a, int b) {
  5. return a + b;
  6. }
  1. // test.c
  2. #include <stdio.h>
  3. #include "myheader.h"
  4. int main() {
  5. printf("%d\n", global_var);
  6. int result = add(1, 2);
  7. printf("%d\n", result);
  8. return 0;
  9. }