现在位置: 首页 > C 教程 > 正文

C extern 关键字

C 变量 C 变量

在 C 语言中,使用 extern 关键字声明的变量是外部变量,表示该变量在其他文件中定义。

extern 关键字在 C 语言中用于声明外部变量或函数,使得它们可以在多个文件中共享和使用。

extern 主要用于实现模块化编程和代码的分离。

extern 变量的声明和定义通常放在不同的文件中。

1、定义和初始化(在一个文件中 file1.c)

实例

#include <stdio.h>

// 定义并初始化外部变量
int d = 3;
int f = 5;

void printExternVariables() {
    printf("d: %d, f: %d\n", d, f);
}

2、声明并使用(在另一个文件中 file2.c)

实例

#include <stdio.h>

// 声明外部变量
extern int d;
extern int f;

int main() {
    // 使用外部变量
    printf("d in main: %d\n", d);
    printf("f in main: %d\n", f);
   
    // 调用其他文件中定义的函数
    printExternVariables();
   
    return 0;
}

// 声明外部函数
void printExternVariables();

extern 函数

类似于变量,函数也可以在一个文件中定义,在另一个文件中声明并使用。

1、定义函数(在一个文件中 file1.c)

实例

#include <stdio.h>

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

2、声明并使用函数(在另一个文件中 file2.c)

实例

#include <stdio.h>

// 声明外部函数
extern void printMessage();

int main() {
    // 调用外部函数
    printMessage();
    return 0;
}

3、编译多个文件

为了使用 extern 变量和函数,必须将所有相关文件一起编译。例如:

gcc file1.c file2.c -o program
./program

注意事项

  • 定义和初始化:外部变量必须在一个文件中定义和初始化,而在其他文件中仅声明。extern 声明不能进行初始化。
  • 作用域extern 变量和函数具有全局作用域,可以在程序的任何地方访问。
  • 重复定义:避免在多个文件中重复定义相同的变量或函数,这会导致链接错误。
  • 头文件使用:通常将 extern 声明放在头文件中,然后在需要的源文件中包含该头文件。

头文件的使用

为了简化管理,可以使用头文件声明 extern 变量和函数。

variables.h 文件代码:

#ifndef VARIABLES_H
#define VARIABLES_H

// 声明外部变量
extern int d;
extern int f;

#endif

functions.h 文件代码:

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

// 声明外部函数
void printExternVariables();
void printMessage();

#endif

然后在源文件中包含头文件:

file1.c 文件代码:

#include <stdio.h>
#include "variables.h"
#include "functions.h"

// 定义并初始化外部变量
int d = 3;
int f = 5;

void printExternVariables() {
    printf("d: %d, f: %d\n", d, f);
}

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

file2.c 文件代码:

#include <stdio.h>
#include "variables.h"
#include "functions.h"

int main() {
    // 使用外部变量
    printf("d in main: %d\n", d);
    printf("f in main: %d\n", f);
   
    // 调用外部函数
    printExternVariables();
    printMessage();
   
    return 0;
}

这样通过头文件管理 extern 声明,代码更加清晰和易于维护。

C 变量 C 变量