【C语言】extern 关键字

在C语言中,extern关键字用于声明一个变量或函数是定义在另一个文件中的。它使得在多个文件之间共享变量或函数成为可能。extern关键字常见于大型项目中,通常用于声明全局变量或函数,这些变量或函数的定义位于其他文件中。

基本用法

  1. 变量声明
c 复制代码
// file1.c
int shared_variable = 10; // 定义变量

// file2.c
extern int shared_variable; // 声明变量

int main() {
    printf("%d\n", shared_variable); // 使用变量
    return 0;
}

在这个例子中,shared_variablefile1.c中定义,并在file2.c中使用extern进行声明,从而可以在file2.c中访问shared_variable

  1. 函数声明
c 复制代码
// file1.c
void shared_function() {
    printf("This is a shared function.\n");
}

// file2.c
extern void shared_function(); // 声明函数

int main() {
    shared_function(); // 调用函数
    return 0;
}

在这个例子中,shared_functionfile1.c中定义,并在file2.c中使用extern进行声明,从而可以在file2.c中调用shared_function

多文件编程

使用extern关键字时,通常会将变量和函数的声明放在头文件(.h文件)中,然后在需要使用这些变量或函数的源文件(.c文件)中包含相应的头文件。

头文件:shared.h

c 复制代码
#ifndef SHARED_H
#define SHARED_H

extern int shared_variable;
extern void shared_function();

#endif // SHARED_H

源文件:file1.c

c 复制代码
#include "shared.h"

int shared_variable = 10;

void shared_function() {
    printf("This is a shared function.\n");
}

源文件:file2.c

c 复制代码
#include <stdio.h>
#include "shared.h"

int main() {
    printf("Shared variable: %d\n", shared_variable);
    shared_function();
    return 0;
}

在这个示例中,shared.h头文件包含变量和函数的声明。file1.c中定义了这些变量和函数,而file2.c通过包含shared.h头文件来访问和使用它们。

注意事项

  • 多次定义问题 :虽然extern关键字允许在多个文件中声明同一个变量或函数,但它们只能在一个文件中定义。如果在多个文件中定义同一个变量或函数,会导致链接错误。

  • 链接阶段处理extern关键字的工作机制在于链接阶段,而不是编译阶段。编译器在编译每个源文件时不会检查extern变量或函数是否已经定义,而是由链接器在链接阶段进行检查。

  • 作用域与存储类extern关键字通常用于全局变量和函数,而不用于局部变量。它的作用域是整个程序,而不仅限于某个文件或函数。

通过使用extern关键字,可以将程序的不同部分分散到多个源文件中,使代码结构更加清晰、模块化,有助于代码的维护和重用。

相关推荐
仍然探索未知中10 分钟前
C语言经典100例
c语言
爱吃西瓜的小菜鸡24 分钟前
【C语言】矩阵乘法
c语言·学习·算法
Stark、2 小时前
【Linux】文件IO--fcntl/lseek/阻塞与非阻塞/文件偏移
linux·运维·服务器·c语言·后端
deja vu水中芭蕾2 小时前
嵌入式C面试
c语言·开发语言
stm 学习ing4 小时前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl
CSND7408 小时前
Ubuntu vi(vim)编辑器配置一键补全main函数
linux·c语言·ubuntu·编辑器·vim
Crazy learner9 小时前
C 和 C++ 动态库的跨语言调用原理
c语言·c++
人才程序员15 小时前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
w(゚Д゚)w吓洗宝宝了15 小时前
C vs C++: 一场编程语言的演变与对比
c语言·开发语言·c++
爱吃西瓜的小菜鸡20 小时前
【C语言】抽空洗澡
c语言·开发语言·学习·算法