c/c++语言中extern的用法(VS编译)

c/c++语言中extern的用法

  • 前言:
      • 1. 声明外部变量
      • 2. 声明外部函数
      • 3. 在头文件中使用
      • 注意事项
  • 效果展示:

前言:

extern 关键字不仅在 C 语言中使用,在 C++ 语言中也同样适用。它主要用于声明一个变量或者函数是在别的文件或翻译单元中定义的,从而告诉编译器在遇到该变量或函数时,不要报错说找不到定义,而是去其他翻译单元中寻找。

以下是一些 extern 关键字的使用场景:

1. 声明外部变量

当你在一个文件中定义了一个全局变量,希望在另一个文件中使用它时,可以在另一个文件中用 extern 关键字声明这个变量。例如:

file1.c

int globalVar = 10;

file2.c

extern int globalVar;void function() {printf("%d\n", globalVar);  // 可以访问file1.c中定义的globalVar
}

2. 声明外部函数

类似地,当你希望在一个文件中调用另一个文件中定义的函数时,可以使用 extern 声明这个函数(尽管对于函数来说,通常不需要显式使用 extern,因为函数默认就是外部的,除非声明为 static)。

file1.c

void myFunction() {printf("Hello from myFunction!\n");
}

file2.c

extern void myFunction();void anotherFunction() {myFunction();  // 调用file1.c中定义的myFunction
}

3. 在头文件中使用

通常,我们会在头文件中声明外部变量和函数,然后在多个源文件中包含这个头文件。头文件中通常会使用 extern 关键字来声明这些外部符号。

myHeader.h

extern int globalVar;
extern void myFunction();

file1.c

#include "myHeader.h"int globalVar = 10;
void myFunction() {printf("Hello from myFunction!\n");
}

file2.c

#include "myHeader.h"void anotherFunction() {printf("%d\n", globalVar);myFunction();
}

注意事项

  • extern 关键字只是声明,不分配内存。实际的内存分配发生在定义的地方。
  • 如果在多个文件中声明并定义一个全局变量(即使使用了 extern),链接器会报错,因为它不知道应该使用哪个定义。
  • 对于函数,即使不使用 extern 关键字,编译器也会默认认为函数是外部的(除非用 static 关键字声明)。

总结来说,extern 关键字在 C 和 C++ 中都非常重要,用于跨文件或翻译单元访问变量和函数。

效果展示:

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

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

相关文章

HTTPS:构建安全通信的基石

HTTPS(Hypertext Transfer Protocol Secure),作为互联网上安全通信的基石,通过在HTTP基础上引入SSL/TLS协议层,实现了数据传输的加密,确保了信息的机密性、完整性和真实性。这一过程涉及多个精细设计的步骤…

DIY 一把 ESP32-C2 智能电动牙刷

简介 对于大多数人来说,早晨起床后的惯例之一是刷牙。早在 1938 年尼龙牙刷问世之前,人们就已经使用各种不同形式和材料的器具来清洁牙齿。 如今,电子牙刷已经十分普遍,甚至还有帮助记录刷牙习惯的智能牙刷。 我们的产品设计理念…

什么是IDS?

什么是IDS? IDS是:入侵检测系统(intrusion detection system,简称“IDS”)是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。它与其他网络安全设备的不同之处便…

闲鱼网页版开放,爬虫的难度指数级降低。

爬虫,可以说是程序员最基础的热手项目。 之前我也一直说阿里系的签名系统搞得太复杂,风控太高,很不利于正常的自动化工具开发,这对于需要阿里应用的客户来说,也是一个很难覆盖的成本支出不是。 当然,我做项…

低代码可视化Uniapp点击事件-代码生成器

在uniapp中,绑定事件主要是通过符号来实现的。uniapp是一个使用Vue.js开发所有前端应用的框架,它允许你编写一次代码,然后发布到iOS、Android、Web(响应式)、以及各种小程序等多个平台。因此,它在事件处理上…

培养关键职业技能,提升个人竞争力

文章目录 一、为什么要培养职业技能?1、提升个人竞争力2、提高工作效率和质量3、适应职业发展变化4、增加收入 二、关键职业技能概述1、专业技术能力2、问题解决能力3、沟通交流能力4、团队合作能力5、领导意识能力6、适应变化能力 三、结语 在当今快速发展的社会中…

如何成为一名AI产品经理?(超全面!超详细!)收藏这一篇就够了!

要成为一名AI产品经理,需要综合多方面的知识和技能,并在实践中不断学习和提升。 一、强化基础教育背景 专业选择:拥有计算机科学、数据科学、统计学或相关领域的学士或硕士学位是基础。这些专业提供了理解AI技术和算法的基本知识&#xff0…

MapStruct 帮你节省60%的代码,提高开发效率

MapStruct 帮你节省60%的代码,提高开发效率https://mp.weixin.qq.com/s?__bizMzkzMTY0Mjc0Ng&mid2247484806&idx1&sn10f190512bd51fae391be2f3f982713c&chksmc266a993f51120859e75d75ec857ccef439e7bf33d5901d0aa3a90419db6072d10adccf83b43#rd

据预测RoboSense未来三年取得近50%的市场份额,并在未来十年内保持行业第一

近日,RoboSense速腾聚创受邀参加S&P Global Mobility [标普全球汽车]举办的2024 Mobility Intelligence Dialogue会议。会上,S&P Global Mobility [标普全球汽车]预测数据显示,未来十年内,自动驾驶前景广阔,中…

window程序设计(1)

代码环境 vs2019 创建Window桌面向导的项目 代码 #include <Windows.h>int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR szCmdLine, _In_ int iCmdShow) {MessageBox(NULL, TEXT("Hello,Window 11"), TEXT(&quo…

【大模型技术】什么时候需要训练和微调属于自己的大模型——小微企业必须要明白的问题

“ 从问题出发&#xff0c;先有需求再有解决方案 ” 老板和员工在思维方式上有一个很大的差别就是&#xff0c;作为老板他们喜欢寻找现有的解决方案&#xff0c;如果现有的解决方案无法满足的情况下&#xff0c;才会自己设计一个解决方案。 而作为员工来说特别是技术人员&…

2024年03月中国电子学会青少年软件编程(图形化)等级考试试卷(一级)答案 + 解析

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;一级&#xff09; 分数&#xff1a;100 题数&#xff1a;37 一、单选题(共25题&#xff0c;共50分) 单击下列哪个按钮&#xff0c;能够让舞台变为“全屏模式”&#xff1f;&#xff08; &#xff09; A…

2.pytest框架实现一些前后置(固件,夹具)的处理,断言和allure-pytest插件生成allure测试报告

一、setup/teardowm,setup_class/teardown_class&#xff08;所有&#xff09; 为什么需要这些功能&#xff1f; 比如&#xff1a;web自动化执行用例之前&#xff0c;请问需要打开浏览器吗&#xff1f;用例执行后需要关闭浏览器吗&#xff1f; 前置后置 二、使用pytest.fixture…

500元以内蓝牙耳机哪款好?四大百元精品机型推荐

一副优质的蓝牙耳机总能为我们带来更加便捷和愉悦的体验&#xff0c;然而&#xff0c;面对市场上琳琅满目的选择&#xff0c;500元以内蓝牙耳机哪款好&#xff1f;如何在有限的预算内找到最适合自己的蓝牙耳机呢&#xff1f;今天我将为大家带来四大百元精品机型推荐&#xff0c…

配网缺陷检测无人机航拍图像数据集(不规范绑扎,螺栓销钉缺失)数据集总共3000张左右,标注为voc格式

配网缺陷检测无人机航拍图像数据集&#xff0c;&#xff08;不规范绑扎&#xff0c;螺栓销钉缺失&#xff09;数据集总共3000张左右&#xff0c;标注为voc格式。 数据集名称 配网缺陷检测无人机航拍图像数据集&#xff08;Distribution Network Defect Detection UAV Aerial I…

Find My太阳镜|苹果Find My技术与太阳镜结合,智能防丢,全球定位

太阳镜是一种常见的眼镜&#xff0c;通常用于防止强光刺激和保护眼睛免受紫外线伤害。太阳镜可以减少光线对眼睛的刺激&#xff0c;缓解眼部疲劳&#xff0c;提高视觉舒适度。佩戴太阳镜可以有效地减少紫外线对眼睛的刺激&#xff0c;降低眼疾的发生率。 在智能化加持下&…

CLion/Git版本控制

文章目录 文章介绍准备工具操作首次提交修改代码提交第二版 文章介绍 记录用clion和git做代码的版本控制 准备工具 CLion2024.2.0.1 git 操作 首次提交 该文件夹的打开方式选择clion 全部提交 成功提交后查看分支 修改代码提交第二版

微信小程序03-页面交互

零、文章目录 微信小程序03-页面交互 1、案例&#xff1a;比较数字大小 &#xff08;1&#xff09;案例分析 需求&#xff1a;本案例将实现“比较数字大小”微信小程序&#xff0c;它的功能是当用户输入两个数字后&#xff0c;点击“比较”按钮可以自动比较这两个数字的大小…

图数据归一化

图数据归一化 文章目录 图数据归一化前言一、图结构归一化1.邻接矩阵归一化2.拉普拉斯矩阵归一化 二、图特征归一化1.输入特征归一化2.中间层特征归一化 前言 在图分析和图网络的研究领域中&#xff0c;图归一化扮演着至关重要的角色。它包括一系列技术和方法&#xff0c;旨在…

关于循环Socket创建超Linux文件句柄限制现象分析

项目场景&#xff1a; 在操作系统的世界中万物皆文件。之前拜读过一些作品&#xff1a;针对于socket的创建&#xff0c;Linux也相应创建文件&#xff08;专业术语中也称文件句柄&#xff09;&#xff0c;于是&#xff0c;我想做一些关于极限的操作&#xff0c;看看这些极限操作…