当前位置:首页 > 科技  > 软件

深入理解 C++ 中的 extern 关键字

来源: 责编: 时间:2023-10-06 19:21:13 389观看
导读在 C++ 语言中,extern 关键字经常被用于声明一个变量或函数。虽然它的用法相对简单,但为了编写出清晰、高效的代码,我们需要更深入地了解其内在含义和用法。本文将全面解析 extern 关键字的用途和使用场景。extern 关键

在 C++ 语言中,extern 关键字经常被用于声明一个变量或函数。虽然它的用法相对简单,但为了编写出清晰、高效的代码,我们需要更深入地了解其内在含义和用法。本文将全面解析 extern 关键字的用途和使用场景。3zg28资讯网——每日最新资讯28at.com

3zg28资讯网——每日最新资讯28at.com

extern 关键字的基本用法

在 C++ 中,extern 关键字主要用于两个方面:一是为了在多个文件中共享同一个变量;二是为了在一个文件中引用另一个文件中定义的函数。3zg28资讯网——每日最新资讯28at.com

extern 用于变量

当我们需要在多个文件中共享同一个全局变量时,我们可以使用 extern 关键字。以下是一个简单的例子:3zg28资讯网——每日最新资讯28at.com

// 文件1: main.cppextern int shared_var;  // 声明一个外部整型变量int main() {    shared_var = 10;  // 使用外部变量    return 0;}// 文件2: shared.cppint shared_var = 0;  // 定义一个全局整型变量

在上述代码中,我们在 shared.cpp 文件中定义了一个全局变量 shared_var,然后在 main.cpp 文件中通过 extern 关键字声明了同名的外部变量 shared_var,从而使其可以在 main.cpp 文件中使用。3zg28资讯网——每日最新资讯28at.com

extern 用于函数

类似地,extern 关键字也可以用于在一个文件中引用另一个文件中定义的函数。例如:3zg28资讯网——每日最新资讯28at.com

// 文件1: main.cppextern void print_message();  // 声明一个外部函数int main() {    print_message();  // 调用外部函数    return 0;}// 文件2: print.cpp#include <iostream>void print_message() {  // 定义一个函数    std::cout << "Hello, World!" << std::endl;}

在这个例子中,我们在 print.cpp 文件中定义了一个函数 print_message,然后在 main.cpp 文件中通过 extern 关键字声明了同名的外部函数 print_message,从而使其可以在 main.cpp 文件中调用。3zg28资讯网——每日最新资讯28at.com

extern "C" 的用法

除了上述用法外,extern 关键字还有一个重要的用途,那就是配合 "C" 使用,来处理 C++ 代码和 C 代码之间的链接问题。3zg28资讯网——每日最新资讯28at.com

由于 C++ 支持函数重载,所以在编译阶段,编译器会对函数名进行改编(mangling),以区分具有相同名字但参数类型不同的函数。然而,C 语言不支持函数重载,也就没有这个改编过程。因此,如果我们想在 C++ 代码中调用 C 代码,或者在 C 代码中调用 C++ 代码,就需要用到 extern "C"。3zg28资讯网——每日最新资讯28at.com

以下是一个例子:3zg28资讯网——每日最新资讯28at.com

// 文件1: main.cpp (C++代码)extern "C" void print_message();  // 使用 extern "C" 声明一个外部函数int main() {    print_message();  // 调用外部函数    return 0;}// 文件2: print.c (C代码)#include <stdio.h>void print_message() {  // 定义一个函数    printf("Hello, World!/n");}

这个例子和前一个例子类似,但有一个重要的区别:print.c 是用 C 语言编写的,而 main.cpp 是用 C++ 编写的。因此,我们需要用 extern "C" 来声明 print_message 函数,以确保 C++ 编译器能正确链接到 C 语言编写的 print_message 函数。3zg28资讯网——每日最新资讯28at.com

结论

在 C++ 语言中,extern 关键字是一个重要的工具,可以帮助我们在多个文件之间共享变量和函数,以及处理 C++ 代码和 C代码之间的链接问题。然而,使用 extern 关键字时,我们需要注意以下几点:3zg28资讯网——每日最新资讯28at.com

  • 在声明 extern 变量或函数时,需要确保其在其他地方已经被定义过。
  • 在使用 extern "C" 时,需要确保所引用的 C 代码不包含任何 C++ 特有的语法或特性。
  • 只有这样,我们才能充分利用 extern 关键字,编写出高效、清晰的代码。

本文链接:http://www.28at.com/showinfo-26-12160-0.html深入理解 C++ 中的 extern 关键字

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 编程新手?跟着这个教程,用Python画出小猪佩奇

下一篇: 一文掌握Python冒泡排序:提升你的排序技能!

标签:
  • 热门焦点
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
  • 中关村论坛11月25日开幕,15位诺奖级大咖将发表演讲

    11月18日,记者从2022中关村论坛新闻发布会上获悉,中关村论坛将于11月25至30日在京举行。本届中关村论坛由科学技术部、国家发展改革委、工业和信息化部、国务
Top