C extern 关键字
在 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);
}
// 定义并初始化外部变量
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 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");
}
void printMessage() {
printf("Hello from printMessage!\n");
}
2、声明并使用函数(在另一个文件中 file2.c)
实例
#include <stdio.h>
// 声明外部函数
extern void printMessage();
int main() {
// 调用外部函数
printMessage();
return 0;
}
// 声明外部函数
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
#define VARIABLES_H
// 声明外部变量
extern int d;
extern int f;
#endif
functions.h 文件代码:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
// 声明外部函数
void printExternVariables();
void printMessage();
#endif
#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");
}
#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;
}
#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 声明,代码更加清晰和易于维护。