C语言之extern关键字实例总结(八十二)

news2024/11/24 16:08:04

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解extern关键字用法

2.extern关键字介绍

  • 在C++中,extern关键字通常用于链接定义在别处声明的变量或函数。extern有两个主要的用法:在函数前使用时,它允许在文件之间调用外部函数;在变量前使用时,它允许在不同的编译单元中引用变量。

在函数前使用:

  • 如果你有一个函数在一个文件中被声明,但在另一个文件中被定义,那么你可以使用extern "C"来告诉编译器这个函数应该按照C语言的方式进行链接。

2.代码实例

1.外部变量

// 文件1:example1.cpp
#include <iostream>
extern int globalVar; // 在文件example2.cpp中定义

int main() {
    std::cout << "The value of globalVar is: " << globalVar << std::endl;
    return 0;
}
// 文件2:example2.cpp
#include <iostream>
int globalVar = 10; // 定义全局变量

int main() {
    std::cout << "The value of globalVar is: " << globalVar << std::endl;
    return 0;
}

在文件example1.cpp中使用了 extern 关键字声明了一个变量 globalVar,然后在文件example2.cpp中定义并初始化了这个变量。然后在文件example1.cpp和文件example2.cpp中分别使用了这个变量。

2.外部函数

// 文件1:example3.cpp
#include <iostream>
extern void func(); // 在文件2中定义

int main() {
    func(); // 调用外部函数
    return 0;
}
// 文件2:example4.cpp
#include <iostream>
void func() { // 定义函数
    std::cout << "This is an external function." << std::endl;
}

在文件example3.cpp中使用了 extern 关键字声明了一个函数 func,然后在文件example4.cpp中定义了这个函数。

3.包含头文件

// 头文件(example5.h): 在这个文件中声明一个变量或函数,可以在多个源文件中使用。
#ifndef EXAMPLE5_H // 防止头文件被多次包含。
#define EXAMPLE5_H
extern int globalVar; // 在其他文件中定义。
#endif // EXAMPLE5_H

创建了一个头文件,其中使用 extern 关键字声明了一个变量 globalVar,然后可以在其他源文件中包含这个头文件并使用该变量。

4.跨文件变量的初始化和赋值

// 文件1:example6.cpp
extern int var; // 在其他文件中定义并初始化。
int main() {
    var = 42; // 赋值
    return 0;
}
// 文件2:example7.cpp
int var; // 定义变量

在文件example6.cpp中使用了 extern 关键字声明了一个变量 var,然后在文件example7.cpp中定义并初始化了这个变量。

5.在全局命名空间中使用变量

// 文件1:example8.cpp
extern int var; // 在全局命名空间中使用变量。
int main() {
    var = 42;
    return 0;
}
// 文件2:example9.cpp
int var; // 定义变量

在文件example8.cpp中使用了 extern 关键字声明了一个变量 var,然后在文件example9.cpp中定义了这个变量。

6.链接外部库

// 文件1:example10.cpp
#include "example_library.h" // 包含库的头文件
int main() {
    someFunction(); // 调用来自库的函数
    return 0;
}
// example_library.h:定义库的函数和变量
#ifndef EXAMPLE_LIBRARY_H
#define EXAMPLE_LIBRARY_H
extern "C" {
    void someFunction(); // 声明库中的函数
}
#endif // EXAMPLE_LIBRARY_H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HBase表数据的读、写操作与综合操作

文章目录 HBase表数据的读、写操作与综合操作一、实验目标二、实验要求及注意事项三、实验内容及步骤 附&#xff1a;系列文章 HBase表数据的读、写操作与综合操作 一、实验目标 熟练掌握通过HBase shell命令来设计HBase表结构实例掌握使用HBase编程创建HBase表、删除HBase表…

中国发表第一篇计算机顶会的人都怎么样了?中国ACL、AAAI、CVPR第一人是谁

夕小瑶科技说 整理 | 王二狗中国大陆发第一篇计算机顶会的人都怎么样了&#xff1f;相信AI从业者对这个话题都会非常感兴趣&#xff0c;本文对知乎上各位大佬的信息做一个整理&#xff0c;分享给大家。 注&#xff1a;信息由知乎网友整理&#xff0c;不保证100%准确&#xff0c…

主流新闻媒体有哪些,怎么邀约记者

主流新闻媒体是社会信息传播的重要渠道&#xff0c;它们拥有广泛的受众群体和影响力。邀请主流新闻媒体参与活动或报道&#xff0c;可以迅速扩大活动影响力&#xff0c;提升组织的知名度和公信力。下面介绍一些主流新闻媒体及邀约媒体的方法。 主流新闻媒体 1、电视台&#x…

算法通过村第十八关-回溯|白银笔记|经典问题

文章目录 前言组合总和问题分割回文串子集问题排序问题字母大小写全排列单词搜索总结 前言 提示&#xff1a;我不愿再给你写信了。因为我终于感到&#xff0c;我们的全部通信知识一个大大的幻影&#xff0c;我们每个人知识再给自己写信。 --安德烈纪德 回溯主要解决一些暴力枚举…

Find My拐杖|苹果Find My技术与拐杖结合,智能防丢,全球定位

拐杖是一种重要的医疗康复辅助用具&#xff0c;辅助腿脚不灵活的人群平稳的行走&#xff0c;避免出现摔倒等情况。目前&#xff0c;全球均已步入老龄化社会&#xff0c;那么老年人的生活质量和安全成为各国学者的关注点。由于年龄原因容易突发意外情况&#xff0c;如摔倒&#…

SSM大学生众筹平台-计算机毕设 附源码22506

SSM大学生众筹平台 摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 大学生众筹平台&#xff0c;主要的模块包括管理员和用户及筹资用户&#xff0c;实现功能包括&#xff1a;首页、个人资料&a…

多媒体融合应急通信解决方案

近年来&#xff0c;随着经济社会快速发展和现代化进程加快&#xff0c;我国公共安全面临诸多新的挑战。面对大型安全事故发生后&#xff0c;救援队伍必须在恶劣的条件下迅速建立指挥调度中心&#xff0c;方能协调前后方救援力量&#xff0c;这对应急通信网络建设的可靠性、时效…

基于springboot实现智慧外贸平台系统【项目源码+论文说明】

基于springboot实现智慧外贸平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合&#xff0c;利用java技术建设智慧外贸平台&#xff0c;实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展&#xff0c;丰富智慧外贸管理经…

ICC2与PT端口时序上的差别

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 有星球成员遇到如下问题: 你好,我想问一下就是之前一直遇到一个情况:INtoReg的path_group的时序报告,ICC2里launch的clock network delay(propagated)会有一个值,skew就很小。 但是到PT里launc…

窗函数法设计FIR中,如何选择窗函数和滤波器阶数N

窗函数法设计FIR中&#xff0c;如何选择窗函数和滤波器阶数N 1、概述 在用窗函数法设计FIR滤波器时&#xff0c;给出了滤波器要求的具体指标&#xff0c;包括通带频率fp、阻带频率fs、通带波纹Rp 和阻带衰减As 等&#xff0c;有了这些指标后&#xff0c;是否什么窗函数都可以选…

辐射骚扰整改思路及方法:实地验证?|深圳比创达电子EMC

某产品首次EMC测试时&#xff0c;辐射、静电、浪涌均失败。本篇文章就“实地验证”问题进行详细讨论。 方案拟定好后&#xff0c;就该准备前往EMC检测机构进行测试了。出发前&#xff0c;先分析4个解决方案的易操作程度&#xff1a;方案2最容易验证&#xff0c;只要将磁环往电…

【机器学习】六、概率图模型

今天我们对概率图模型&#xff08;Probabilistic Graphical Model&#xff0c;PGM&#xff09;做一个总结。 模型表示 概率图模型&#xff0c;是指一种用图结构来描述多元随机变量之间条件独立关系的概率模型。 它提出的背景是为了更好研究复杂联合概率分布的数据特征&#x…

亚马逊合规,亚马逊涉及12个站点合规政策更新,需警惕合规要求!

最近&#xff0c;许多亚马逊站点的卖家陆续收到了合规政策更新的通知邮件&#xff0c;涵盖了美国站、加拿大站、英国站、法国站、意大利站、德国站以及西班牙站。 这些更新影响了不同品类的卖家&#xff0c;包括以下品类&#xff1a; 美国站&#xff08;US&#xff09;对于“发…

农林牧数据可视化监控平台 | 智慧农垦

数字农业是一种现代农业方式&#xff0c;它将信息作为农业生产的重要元素&#xff0c;并利用现代信息技术进行农业生产过程的实时可视化、数字化设计和信息化管理。能将信息技术与农业生产的各个环节有机融合&#xff0c;对于改造传统农业和改变农业生产方式具有重要意义。 图扑…

3 任务3 使用趋动云部署自己的stable-diffusion

使用趋动云部署自己的stable-diffusion 1 创建项目&#xff1a;2 初始化开发环境实例3 部署模型4 模型测试 1 创建项目&#xff1a; 1.进入趋动云用户工作台&#xff0c;选择&#xff1a;当前空间&#xff0c;请确保当前所在空间是注册时系统自动生成的空间。 a.非系统自动生成…

19.6 Boost Asio 文本压缩传输

Base64是一种二进制到文本的编码方案&#xff0c;用于将二进制数据转换为ASCII字符串格式。它通过将二进制数据流转换为一系列64个字符来工作&#xff0c;这些字符都可以安全地传输到设计用于处理文本数据的系统中。 如下代码中我们使用Boost中提供的base64_from_binary头文件…

网站小程序分类目录网源码系统+会员登录注册功能 带完整搭建教程

大家好啊&#xff0c;源码小编今天来给大家分享一款网站小程序分类目录网源码系统会员登录注册功能 。 以下是核心代码图模块&#xff1a; 系统特色功能一览&#xff1a; 分类目录&#xff1a;系统按照不同的类别对网站进行分类&#xff0c;方便用户查找自己需要的网站。用户可…

【算法与数据结构】39、LeetCode组合总和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题当中数字可以多次使用&#xff0c;那么我们在递归语句当中不能直接找下一个candidate的元素&…

IP地址与MAC地址(硬件地址)的区别

IP地址和硬件地址都是用于标识网络设备的地址&#xff0c;但它们的作用和使用方式不同。IP地址是用于在网络中唯一标识一个设备的逻辑地址它是由网络协议栈分配的&#xff0c;可以动态地分配和改变。而硬件地址是设备的物理地址&#xff0c;也称为MAC地址&#xff0c;是由设备制…