0

0

c++的extern关键字有什么用 声明和定义的分离【语言基础】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-12-19 16:52:02

|

199人浏览过

|

来源于php中文网

原创

extern关键字核心作用是声明变量或函数在别处定义,实现声明与定义分离;支持跨文件共享全局变量、防止头文件误定义、配合extern "C"实现C链接兼容,以及显式声明const变量以突破内部链接限制。

c++的extern关键字有什么用 声明和定义的分离【语言基础】

extern 关键字在 C++ 中的核心作用是:**声明一个变量或函数在别处定义,告诉编译器“这个符号存在,但不在当前翻译单元里定义”,从而支持声明与定义的分离。

解决跨文件使用变量的问题

当多个源文件需要共享同一个全局变量时,不能每个文件都定义一份(否则链接时报重复定义错误),而只能在一个地方定义,其他地方用 extern 声明。

  • a.cpp 中定义:int global_count = 42;
  • b.cpp 中声明:extern int global_count; —— 这样就能读写它,且不产生新定义
  • 注意:extern 不分配存储空间,只有定义才分配

避免头文件中误定义全局变量

如果在头文件里直接写 int config_flag = 1;,每个包含它的 .cpp 文件都会生成一份定义,链接失败。正确做法是:

  • 头文件(config.h)中写:extern int config_flag;(纯声明)
  • 某个源文件(如 main.cpp)中写:int config_flag = 1;(唯一定义)
  • 这样所有文件都能通过 extern 访问同一份变量

链接指定与 C 风格函数兼容

extern "C" 是一种特殊用法,用于告诉 C++ 编译器:按 C 的方式链接该函数(禁用 C++ 的名称修饰),常用于调用 C 库或提供 C 接口:

PicWish
PicWish

推荐!专业的AI抠图修图,支持格式转化

下载

立即学习C++免费学习笔记(深入)”;

  • extern "C" void legacy_init(); —— 声明一个 C 风格函数
  • extern "C" { ... } 可以包裹一组声明,批量处理
  • C++ 函数默认是 extern "C++",一般不用显式写出

const 变量的隐含链接性例外

全局 const 变量默认具有内部链接(相当于加了 static),即使不写 extern,也不能被其他文件访问。若想跨文件共享 const 变量,必须显式加上 extern:

  • 头文件中:extern const int MAX_SIZE = 100;(注意:带初始化的 extern 声明即为定义,需确保只出现一次)
  • 更安全的做法是头文件中声明:extern const int MAX_SIZE;,在某 .cpp 中定义:const int MAX_SIZE = 100;

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

523

2023.09.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

75

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

537

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

52

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

175

2023.11.23

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

3

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号