extern变量调用报错

[C]extern声明变量报错:undefined reference终极解决方案 或。 阅读详情

前一段时间在应用extern变量时报错,今天花点时间来理清一下

extern 的功能很多,我想今天先理清一个问题,那就是extern 变量的声明和定义之间的关系。 

extern 可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其它模块中寻找其他定义。另外extern 也可以用来进行链接指定。

extern定义变量

1.使用extern 声明全局变量或函数时,一定要注意所有声明的变量或函数必须在且仅在一个源文件中实现定义。如:extern int a;//只是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现链接错误。

2.extern对变量的定义和声明

变量:extern int a;//声明一个全局变量a

      int a;//定义一个全局变量a

 

      extern int a=0;//定义一个全局变量a 并给初值

      int a = 0;//定义一个全局变量a 并给初值

      第四个等于第三个,都是定义一个可以被外部使用的全局变量,并给初值。他们看上去都一样,但是定义只能出现在一处,也就是说不管int a;还是extern int a=0;还是int a=0;都只能出现一次,而那个extern int a 可以出现很多次。当你要引用一个全局变量的时候,你就要声明extern int a;这时候不能省略,因为省略就变成int a;这是一个定义,不是声明

 

总结:

对于变量而言,如果你想在本源文件中使用另外一个源文件的变量,就需要在使用前用extern声明该变量,或者在头文件中用extern 声明该变量;

修饰符extern修饰变量或者函数(转) 在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。 1. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a 阅读详情

相关推荐

PostgreSQL 在 Windows操作系统 无管理员权限情况下的部署详解

但是因为使用默认5432端口,我们修改了端口,所以连接报错,需要修改local连接信息,右键-属性修改相应信息即可,方式同上。(也别太任意吧,个人习惯工具放在不包含中文及特殊字符的目录,另外目录名尽量简短,避免不必要的麻烦)图中我解压到了自己的tools\postgresql18。1)如果想修改默认的5432端口,找到初始化目录中的(上面的tools\postgresql18\。此处替换成你的实际目录\tools\postgresql18\pgsql\pgAdmin 4\runtime。

dong_zhi2328的博客 1117

有关extern 使用出错而出现的Error

对于新手来说,分辨,理清extern的用法是一件很费力的事情,很多时候,强行使用extern,很容易报出各种各样的Error和Warning。措不及防,手忙脚乱。今天我来试着根据我出现过的错误来理一理因extern使用出错的情况以及解决方案。 1,MAIN.C(4): error C279: 'XXX': multiple initialization   (重复初始化) 出现这个错误的原因是

guyueyanfeng的博客 5537

Megatron-LM深度解析:万亿参数大模型的3D并行训练之道

训练框架,采用创新的"层内模型并行"设计,通过将Transformer层的计算拆分到多个GPU上并行执行,显著提升训练效率。该系统支持3D并行策略(数据并行、张量并行、流水线并行)和序列并行等新技术,成功应用于训练5300亿参数的MT-NLG模型。相比DeepSpeed、TPU GSPMD等框架,Megatron-LM在NVIDIA GPU上展现出卓越性能,并与TensorRT等工具深度集成,形成从训练到部署的完整解决方案。该项目持续演进,已成为大模型训练的重要基准。

数据与算法架构提升之路专栏 2088

vscode中使用extern关键字出现错误

我刚刚开始使用vscode, 今天写了两个.c文件test1.c和test2.c,如下图所示,他们在同一个文件夹下面 其中test1.c里面的代码是这样的 #include<stdio.h> extern int a2;//引用在test2.c中定义的变量a2 int main() { printf("%d\n",a2); return 0; } test2.c的代码是这样的 int a2=27; 代码非常简单,目的就是测试这个extern关键字能不能引用到外部变

zhangxucumt的博客 4303

从UART到RS485:手把手教你用SIT3485E收发器搞定工业级通信(含原理图与PCB布局要点)

本文详细解析了从UART到RS485的工业级通信转换,重点介绍了SIT3485E收发器的原理图设计、PCB布局要点及抗干扰技巧。通过差分信号传输和优化电路设计,实现长距离、多设备稳定通信,适用于工业自动化等复杂环境。

weixin_29169505的博客 349

海洋与地质地理信息数据下载网站汇总集锦

各种海洋与地质地理信息数据集合

qq_36980284的博客 1268

C语言之extern声明辨析

 1 基本解释  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。  另外,extern也可用来进行链接指定。 2 问题:extern 变量  在一个源文件里定义了一个数组:char a[6];  在另外一个文件里用下列语句进行了声明:extern char *a;  请问,这样可以吗?

peterxin's blog 2076

谷粒商城 - 个人笔记(集群部署篇一)

电商后台管理系统+电商系统,掌握微服务的全套方案。该系统有商品服务、仓储服务、订单服务、购物车服务、检索服务、认证中心服务、网关服务、用户服务、秒杀服务、第三方服务。使用SpringBoot+SpringCloud并配套SpringCloud Alibaba系列,引入全套微服务治理方案:Nacos注册中心/配置中心、Feign远程调用、Gateway网关、Redisson缓存、基于ElasticSearch7全文检索、异步编排与线程池、RabbitMQ柔性事务方案、Redisson分布式锁、分布式信号量等。

知行 4004

c语言 extern_Visual C++ 6.0环境中C语言extern 变量使用过程报错

extern变量称为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。本次错误的解决方法同样适用于外部函数。外部函数就是可以被其他源文件调用的函数,定义外部函数时使用extern进行修饰。首先,分别创建两个源文件“ex1.c”和“ex2.c”。其中,“ex2.c”声明了一个外部整型变量a,暂未定义它的值;“ex1.c”中定义了一个变量名相同(a)的整形...

weixin_39614521的博客 1301

电赛经验分享——赛前准备

⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。⏩在之前的电赛中取得了省一的成绩,本文对电赛比赛前需要准备什么做一个经验分享。加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!

qq_52608074的博客 7779

Orin 调试GMSL camera 96712手册重点

96712基础理解

乐于分享 9188

c++ extern的用法【转载】

现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子。这两个文件极为简单,在A.cpp中我们定义了一个全局变量i,在B中我们也定义了一个全局变量i。这就是说,在编译阶段,各个文件中定义的全局变量相互是透明的,编译A时觉察不到B中也定义了i,同样,编译B时觉察不到A中也定义了i。

max的博客 849

【深度学习新浪潮】什么是system 1和system 2?

System 1(快速生成)指大模型直接基于输入生成响应,无需显式中间推理步骤。例如,GPT-4等模型在默认状态下通过Transformer直接输出结果,擅长快速回答简单问题或生成连贯文本,但在复杂逻辑任务中可能出错。这类模型的内部计算以向量形式隐式进行,难以处理符号推理等需要离散决策的任务。System 2(慢速推理)指模型通过生成中间token(如思维链、分步推导)或多次调用LLM进行复杂推理。

专注:太空算力、AI infra、异构调度、大模型成本工程 928

extern “C“关键字使用

文章目录extern的含义extern "C"的含义和使用 extern的含义 extern是用来声明全局变量和函数的,其目的是为了告诉编译器被修饰的全局变量和函数是来自于其他模块,这样对于编译器而言: 在编译阶段,编译器认为变量和函数定义在其他地方已经有了,就不会报找不到变量和函数定义的错误。 在链接阶段,编译器会去其他链接库中去查找全局变量和函数,如果找不到则会报链接错误。 举例如下: moduleA.c中定义全局变量和函数如下: #include "moduleA.h" int AddTwoNum

jonathan_hsu_HW的博客 378

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

static的第三种用法(修饰函数)

其实在外部函数和外部变量前面加上static并不是无意义的事情,比如说加强了保密性,使其不会被随意调用。其次,这样可以防止函数名字发生冲突而引起报错。#其实这一节内容上一节基本上也说过了,也要用到“extern”,大致意思也是当外部函数想调用时,前面加上static就会使其无法被调用。

Anciente的博客 263

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

extern连接发生在什么时候

extern的连接发生在编译时的连接阶段, 但是看下面的代码中add()函数没有被调用, extern void add(); int main() { return 0; }  此时没有定义add却没有编译问题,编译器的这个行为也不难理解。 因为add没有被调用,所以没定义也没关系。   extern void add(); int main() { ...

Think On Think 269

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

CCS报错#10234-D unresolved symbols remain

发现该参数被我定义为extern形式的,该关键字表示该变量在程序的其他地方定义,编译时编译器会在程序的其他地方找该变量的起源,但是该变量又是在头文件中第一次被定义和声明,所以编译器会告诉我们该参数有问题。最后通过屏蔽程序,找到问题,当在头文件中声明的一个参数被调用时,程序就会报错。最近工作中遇见了这个问题,我在CCS中新建源文件和头文件,编译就保存这个。将extern关键词摘掉就可以了。

W9999996的博客 645

解决LNK2001和LNK2005的报错

解决LNK2001和LNK2005的报错

2401_87837211的博客 233

Mac版vscode多个c程序编译错误

百度查询很久找到解决办法,更改tasks文件中的设置,但更改后仍然报错。最后发现是我运用了coderunner这个插件,所以我需要更改这个插件的设置。设置中搜索code runner,找到Code-runner:Executor Map,点击在settings.json中编辑,在"c"一行,$filename后增加变量asdf所在c文件,例如add.c,即可成功编译。

ckx20011121的博客 210

【KEIL报错已解决】.\Objects\Project.axf: Error: L6218E: Undefined symbol Rx_buffer (referred from usart.o).

【KEIL报错已解决】.\Objects\Project.axf: Error: L6218E: Undefined symbol Rx_buffer (referred from usart.o).

2301_81011494的博客 2057

C/C++:extern关键字

当一个模块需要引用另一个模块的变量或函数时,可以用extern关键字声明引用。 extern “C”声明调用的C库函数,因为C命名规则不同,所以extern “C”声明函数不能重载。 ...

ShellDawn的博客 178

关键字extern的使用

函数        声明该函数可以被外部模块调用。变量        放在变量前,用来声明一个变量,说明该变量已经在其它地方定义,如:extern int i; 该变量的定义可以是:        该变量可以是在其它.c中定义的全局变量。        该变量可以是在同一个.c中定义的全局变量,但是是在引用该变量之后定义的,则在使用该变量时需要使用extern声明该变量。        变量只能是...

lcxhjg的专栏 162

extern声明变量详解

昨天写完文章快零点,为了不浪费每天一次的群发资格,得赶在零点之前发送,刚给自己的个人微信号发了预览,Mac竟然死机了,看来一个月不关机还是会出点小问题。写的文章还没保存,这下只能是从手机复制粘贴发送到电脑上重新编辑了,于是狠了心按了强制关机。重新开机后发现,所有软件竟然全部恢复了死机前的状态,包括我那正在编辑还没保存的文稿,这里要为Mac系统点个赞! 以上是题外话,今天的内容是编程相关的,非计算

littlewhite1989的专栏 1万+

extern的作用

用#include可以包含其他头文件中变量、函数的声明,为什么还要 extern 关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含 #include<xxx.h> (xxx.h包含了a的声明)不就可以了么,为什么还要用 extern 呢? 这个问题一直也是似是而非的困扰着我许久,经过实践和查找资料,有如下总结: 一、头文件 首先说下头文件,其实头文件对计...

时有限 8884

C中变量的存储方式以及extern与static对变量和函数的用法

C语言中局部变量、全局变量的存储方式,extern对局部变量、函数的三种用法,static对局部变量、全局变量、函数的三种用法!

ZGX_2005的博客 7392
上一篇: 解决 multiple definition of
下一篇: errno的一些错误定义
B_Dogs881221
博客等级 码龄15年 15粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值