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

news2025/2/23 13:28:55

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.coloradmin.cn/o/2146443.html

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

相关文章

怎么操作使http变成https访问?

获取SSL证书 选择证书颁发机构:可以选择受信任的免费或付费证书颁发机构(CA)如JoySSL 申请和验证域名:注册并填写注册码230920,验证域名所有权。下载SSL证书文件到本地电脑. JoySSL品牌证书 注册享大额优惠JoySSL是网…

Android开发高频面试题之——Android篇

Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…

车市状态喜人,国内海外“两开花”

文/王俣祺 导语:随着中秋假期告一段落,“金九”也正式过半,整体上这个销售旺季的数据可以说十分喜人,各家车企不是发布新车、改款车就是推出了一系列购车权益,充分刺激了消费者的购车热情。再加上政府政策的鼎力支持&a…

Unity 使用Editor工具查找 Prefab 中的指定脚本

在 Unity 项目中,随着项目规模的扩大和 Prefab 数量的增加,管理和定位 Prefab 中的脚本变得更加复杂。为了提高开发效率,所以需要编写一个自定义的 Unity Editor 工具,帮助查找某个 Prefab 中是否使用了指定的脚本。本文将介绍如何…

LIN总线CAPL函数——干扰LIN帧响应段(linInvertRespBit )

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

目标检测:滑块验证

最近在做一些爬虫相关的任务,有时候在登录时候需要去做滑块验证,刚好自己是做AI这一块得,就想着使用目标检测去做检测,然后绕过滑块。

AI 时代,大模型产业落地的八大思考

引言 在人工智能领域,大模型技术正逐渐成为推动行业进步的关键力量。随着技术的发展,大模型不仅在学术界引起了广泛的关注,也在产业界展现出巨大的应用潜力。然而,如何将这些强大的模型有效地应用到实际产业中,仍然是…

什么软件可以远程控制电脑?好用的电脑远程控制软件有哪些?这6款可以帮到你!

在如今的数字化办公环境中,远程控制电脑已成为解决问题、协作工作的必备技能。 无论是技术支持、远程办公,还是简单的文件传输,远程控制软件都能让我们随时随地连接其他电脑,省时省力。 那么,有哪些好用的远程控制软…

大数据和代理:揭示它们之间的微妙联系

大数据,顾名思义,是指使用传统数据处理应用程序无法有效处理的极其庞大而复杂的数据集。这些数据集的特点是数量庞大、速度快、种类繁多,有可能提供有价值的见解并支持各个行业的决策过程。 这些数据可能来自各种来源,例如社交媒体…

一文速通calcite结合flink理解SQL从文本变成执行计划详细过程

文章目录 你可以学到啥测试代码背景知识SQL转变流程图问题 你可以学到啥 SQL如何一步步变成执行计划的有哪些优化器,哪些优化规则calcite 和flink 如何结合的 测试代码 EnvironmentSettings settings EnvironmentSettings.inBatchMode(); TableEnvironment tabl…

Shein西班牙开放平台模式广受市场欢迎,Shein适合卖什么产品?

Shein是一家专注于女性快时尚的跨境B2C互联网企业,主要面向欧美、中东等消费市场。经过海外十余年的发展,Shein在全球积累了数量庞大且仍在高速增长的广泛用户基础。目前Shein已开放自营商家及平台卖家两大合作模式,通过入驻Shein平台&#x…

23ai DGPDB,Oracle资源池战略的最后一块拼图

Oracle对资源池是有执念的! 在我看来,这种执念一方面是应用架构的微服务化,数据库被拆分的越来越小,而服务器的硬件能力是不断提升的,CPU核心数、内存和存储的容量都按照摩尔定律在不断增加,这就使得数据库…

QTAndroid编译环境配置

开始 QT 官网的安装教程安装,经过测试有部分小错误。以下是结合教程和网上搜集的一些材料最后安装成功的步骤。 SDK和JDKhttp://链接: https://pan.baidu.com/s/13CImHLAoUFAdecF2BVsBlQ?pwd627g 提取码: 627ghttp://链接: https://pan.baidu.com/s/13CImHLAoUFAd…

Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)

两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: git reset [--hard|soft|mixed|merge|keep] [commit|HEAD] 情况二 …

Axure设计之表格列冻结(动态面板+中继器)

在Web端产品设计中,复杂的表格展示是常见需求,尤其当表格包含大量列时,如何在有限的屏幕空间内优雅地展示所有信息成为了一个挑战。用户通常需要滚动查看隐藏列,但关键信息列(如ID、操作按钮等)在滚动时保持…

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够: (1)分…

VMware vSphere 8.0 Update 3b 发布下载,新增功能概览

VMware vSphere 8.0 Update 3b 发布下载,新增功能概览 vSphere 8.0U3 | ESXi 8.0U3 & vCenter Server 8.0U3 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8-u3/,查看最新版。原创作品,转载请保留出处。 作者主页…

汽车软件开发之敏捷开发

一、前言 目前汽车电子产品,特别是汽车几大域控(如:智能座舱、智能驾驶、智能网联、车身控制)市场竞争激烈,消费者对汽车的需求逐渐多元化和个性化,用户对座舱和智驾产品的要求也越来越高。他们不仅要求产…

人工智能时代,我们依旧有无限的选择权!

人工智能时代,即有人两眼放光,又有人忧心忡忡。前者看到大量的机遇、蓝海,后者看到了失业和糟糕的未来,亦或是有人有喜有忧。但是只要你知晓一个真谛:凡事皆有利有弊,那便不用内耗了。或是选择当前的生活节…

SAP B1 - 新账套设置密码不过期

背景 建立新账套后,每隔一段时间就会自动弹出以下要求更改密码的提示窗口,最讨厌的是系统会记住你的所有历史密码,新设置密码不能与所有曾用密码相同。找到终止该自动更换密码的设置,遂总结为经验帖。 操作 点击位于顶栏的小人图…