news 2026/4/23 12:25:29

【C语言】extern 关键字详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C语言】extern 关键字详解

该变量或函数的定义在其他地方。这是实现模块化和代码组织的重要手段。以下表格总结了extern关键字的主要用途。

用途

描述

示例

变量声明

告诉编译器变量在其他文件中定义,不分配内存。

extern int global_var;

变量定义

实际分配内存并初始化变量。

int global_var = 10;

函数声明

告诉编译器函数在其他文件中定义,提供函数的签名。

extern void my_function(int);

函数定义

实现函数的具体功能。

void my_function(int x) { ... }

1.1 变量声明与定义
  • 声明extern声明一个变量或函数,告诉编译器该变量或函数在其他文件中定义。例如: extern int global_var; // 声明 global_var 变量 这表明global_var变量在其他地方定义,但在当前文件中可以使用它。
  • 定义:定义一个变量或函数分配实际的内存空间。例如: int global_var = 10; // 定义 global_var 变量并初始化 这实际创建了global_var变量,并分配内存。
1.2 函数声明与定义
  • 声明:函数的声明也可以使用extern关键字,尽管在C语言中函数默认是extern的。例如: extern void my_function(int); // 声明 my_function 函数 这表明my_function函数在其他文件中定义,并接受一个整数参数。
  • 定义:函数的定义则包含实际的函数实现。例如: void my_function(int x) { // 函数实现 } 这实际实现了my_function函数的功能。

2.extern的实际应用

2.1 跨文件共享全局变量

假设我们有两个文件:file1.cfile2.c,并希望在这两个文件之间共享一个全局变量。

  • file1.c:

代码语言:c

AI代码解释

// 定义全局变量 int global_var = 10; void print_global_var() { printf("Global variable: %d\n", global_var); }
  • file2.c:

代码语言:c

AI代码解释

#include <stdio.h> // 声明全局变量 extern int global_var; void update_global_var(int new_value) { global_var = new_value; }
  • main.c:

代码语言:c

AI代码解释

#include <stdio.h> // 函数声明 void print_global_var(); void update_global_var(int); int main() { print_global_var(); // 输出: Global variable: 10 update_global_var(20); print_global_var(); // 输出: Global variable: 20 return 0; }

编译和链接

要编译这些文件并进行链接,可以使用以下命令(假设使用gcc编译器):

代码语言:c

AI代码解释

gcc file1.c file2.c main.c -o my_program

执行my_program后,输出结果如下:

代码语言:c

AI代码解释

Global variable: 10 Global variable: 20
2.2 跨文件共享函数声明

类似于全局变量,函数也可以通过extern关键字在文件之间共享。

  • file1.c:

代码语言:c

AI代码解释

#include <stdio.h> void print_message() { printf("Hello from file1.c\n"); }
  • file2.c:

代码语言:c

AI代码解释

#include <stdio.h> extern void print_message(); // 声明函数 void call_print_message() { print_message(); // 调用函数 }
  • main.c:

代码语言:c

AI代码解释

#include <stdio.h> extern void call_print_message(); // 声明函数 int main() { call_print_message(); // 输出: Hello from file1.c return 0; }

编译和链接

代码语言:c

AI代码解释

gcc file1.c file2.c main.c -o my_program

执行my_program后,输出结果如下:

代码语言:c

AI代码解释

Hello from file1.c

3. 注意事项

  • 初始化与定义extern关键字不用于初始化变量。初始化变量时应使用非extern声明。
  • 同名变量:在多个文件中使用extern声明同一个变量时,必须确保变量在一个地方定义,避免链接时的重定义错误。
  • 函数声明:函数的声明可以省略extern,因为函数声明默认是extern的。

https://www.dongchedi.com/article/7593052357961859609
https://www.dongchedi.com/article/7593053003943707161
https://www.dongchedi.com/article/7593053159065485886
https://www.dongchedi.com/article/7593032488635351614
https://www.dongchedi.com/article/7593036857261244953
https://www.dongchedi.com/article/7593037716343046681
https://www.dongchedi.com/article/7593040090407010841
https://www.dongchedi.com/article/7593053767038337560
https://www.dongchedi.com/article/7593038857445540376
https://www.dongchedi.com/article/7593038567396819518
https://www.dongchedi.com/article/7593037133037158937
https://www.dongchedi.com/article/7593040577730593304
https://www.dongchedi.com/article/7593038167410934334
https://www.dongchedi.com/article/7593038988328419902
https://www.dongchedi.com/article/7593038355794215449
https://www.dongchedi.com/article/7593035106705932825
https://www.dongchedi.com/article/7593030400185188888
https://www.dongchedi.com/article/7593036220402647614
https://www.dongchedi.com/article/7593038911606440472
https://www.dongchedi.com/article/7593055345048912409
https://www.dongchedi.com/article/7593036146780013080
https://www.dongchedi.com/article/7593055998798578238
https://www.dongchedi.com/article/7593055040021987865
https://www.dongchedi.com/article/7593055050289873432
https://www.dongchedi.com/article/7593055481636454936
https://www.dongchedi.com/article/7593053214056972825
https://www.dongchedi.com/article/7593055039552733720
https://www.dongchedi.com/article/7593053818359661118
https://www.dongchedi.com/article/7593054441390408254
https://www.dongchedi.com/article/7593053004065358361
https://www.dongchedi.com/article/7593055276706791998
https://www.dongchedi.com/article/7593059688728937022
https://www.dongchedi.com/article/7593058103126491710
https://www.dongchedi.com/article/7593056305229840958
https://www.dongchedi.com/article/7593057187287908888
https://www.dongchedi.com/article/7593059688728773182
https://www.dongchedi.com/article/7593057984951910974
https://www.dongchedi.com/article/7593057124842963480
https://www.dongchedi.com/article/7593059843347530264
https://www.dongchedi.com/article/7593054552925487641
https://www.dongchedi.com/article/7593057935971090969
https://www.dongchedi.com/article/7593058505985589785
https://www.dongchedi.com/article/7593057648438919742
https://www.dongchedi.com/article/7593059109587780120
https://www.dongchedi.com/article/7593058103126983230
https://www.dongchedi.com/article/7593059774406001177
https://www.dongchedi.com/article/7593056473081840153
https://www.dongchedi.com/article/7593056301866107417
https://www.dongchedi.com/article/7593057388245418558
https://www.dongchedi.com/article/7593059843347694104
https://www.dongchedi.com/article/7593057935971025433
https://www.dongchedi.com/article/7593058570980033086

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:25:20

SVGView:SwiftUI环境下的SVG解析与渲染框架

SVGView&#xff1a;SwiftUI环境下的SVG解析与渲染框架 【免费下载链接】SVGView SVG parser and renderer written in SwiftUI 项目地址: https://gitcode.com/gh_mirrors/sv/SVGView SVGView是一个基于SwiftUI构建的开源框架&#xff0c;旨在将SVG&#xff08;可缩放矢…

作者头像 李华
网站建设 2026/4/23 12:25:14

Python自动化电话测试工具深度解析:从技术原理到实战应用

Python自动化电话测试工具深度解析&#xff1a;从技术原理到实战应用 【免费下载链接】callPhoneBoom 最新可用&#xff01;&#xff01;&#xff01;夺命百连呼、电话轰炸、电话攻击(电话轰炸、可代替短信轰炸)、留言攻击工具 项目地址: https://gitcode.com/gh_mirrors/ca/…

作者头像 李华
网站建设 2026/4/1 0:02:14

Trix富文本编辑器:现代Web写作的完美解决方案

Trix富文本编辑器&#xff1a;现代Web写作的完美解决方案 【免费下载链接】trix A rich text editor for everyday writing 项目地址: https://gitcode.com/gh_mirrors/tr/trix Trix是一款专为日常写作设计的富文本编辑器&#xff0c;由知名团队开发&#xff0c;为现代W…

作者头像 李华
网站建设 2026/4/22 19:33:03

强力突破5大难题:多人语音识别如何实现精准分离?

强力突破5大难题&#xff1a;多人语音识别如何实现精准分离&#xff1f; 【免费下载链接】FunASR A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models, Supporting Speech Recognition, Voice Activity Detection, Text Post-proces…

作者头像 李华
网站建设 2026/4/18 15:21:44

MusicFreeDesktop无损音乐播放终极指南:从新手到专业用户

MusicFreeDesktop无损音乐播放终极指南&#xff1a;从新手到专业用户 【免费下载链接】MusicFreeDesktop 插件化、定制化、无广告的免费音乐播放器 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreeDesktop 还在为音乐播放器的音质表现而纠结&#xff1f;MusicFr…

作者头像 李华