news 2026/8/22 12:25:23

【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/8/20 7:54:13

OBS Move Transition终极指南:打造专业级动态转场效果

OBS Move Transition终极指南&#xff1a;打造专业级动态转场效果 【免费下载链接】obs-move-transition Move transition for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-move-transition OBS Move Transition是一款功能强大的开源转场插件&#xff…

作者头像 李华
网站建设 2026/8/21 18:01:05

MacBook Touch Bar终极自定义指南:5步打造你的专属控制中心

MacBook Touch Bar终极自定义指南&#xff1a;5步打造你的专属控制中心 【免费下载链接】pock Widgets manager for MacBook Touch Bar 项目地址: https://gitcode.com/gh_mirrors/po/pock MacBook的Touch Bar是一个极具潜力的交互区域&#xff0c;但原生功能往往无法满…

作者头像 李华
网站建设 2026/8/21 18:01:05

SuperSonic终极指南:从零开始构建智能数据分析系统

SuperSonic终极指南&#xff1a;从零开始构建智能数据分析系统 【免费下载链接】supersonic SuperSonic是下一代由大型语言模型&#xff08;LLM&#xff09;驱动的数据分析平台&#xff0c;它集成了ChatBI和HeadlessBI。 项目地址: https://gitcode.com/GitHub_Trending/su/s…

作者头像 李华
网站建设 2026/8/21 18:01:17

HOScrcpy实战指南:解锁鸿蒙设备远程控制的终极秘籍

HOScrcpy实战指南&#xff1a;解锁鸿蒙设备远程控制的终极秘籍 【免费下载链接】鸿蒙远程真机工具 该工具主要提供鸿蒙系统下基于视频流的投屏功能&#xff0c;帧率基本持平真机帧率&#xff0c;达到远程真机的效果。 项目地址: https://gitcode.com/OpenHarmonyToolkitsPlaz…

作者头像 李华
网站建设 2026/8/21 18:01:12

GLPI高效实战秘籍:从零精通开源IT资产管理

GLPI高效实战秘籍&#xff1a;从零精通开源IT资产管理 【免费下载链接】glpi glpi-project/glpi: 是一个用于管理 IT 资产和服务的 PHP 应用程序。适合用于 IT 资产管理和服务管理。特点是提供了简单的 API&#xff0c;支持多种 IT 资产和服务管理功能&#xff0c;并且可以自定…

作者头像 李华
网站建设 2026/8/21 18:01:08

pix2pix模型部署终极指南:从入门到实战的完整教程

pix2pix模型部署终极指南&#xff1a;从入门到实战的完整教程 【免费下载链接】pix2pix Image-to-image translation with conditional adversarial nets 项目地址: https://gitcode.com/gh_mirrors/pi/pix2pix 想要快速掌握pix2pix模型部署的核心技巧吗&#xff1f;本文…

作者头像 李华