0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中关键词extern用法的一个注意事项

冬至子 来源:永珂在线 作者:沙鸥520 2023-11-02 14:42 次阅读

在做项目开发时,在一个单片机C语言程序(用keil开发)中,如果有两个C文件,在其中一个C文件(设为a文件)定义了一个全局变量v,并在此文件里的程序段里修改此变量,在另外一个C文件(设为b文件)里用外部变量(extern)的方法引用此变量,并读取变量v,但是,在b中读取时结果变量v出错,出现乱值。

什么原因?

v在b文件里作为外部变量,被认为分配的地址在其他地方,在b文件里只是读取没有写入,实际就没有分配内存地址,从而出错。

图片

怎么修改?

方法1,在b文件中定义此变量v,在a文件中用外部变量的方式引用变量v,在a文件里修改变量v,在b文件中回读变量v,结果正常。

这样,在b文件里定义了变量v,分配了内存地址,在a文件中引用外部变量v并进行了写入操作,也分配了内存地址,所以不出错。

图片

方法2,最优方法,在一个c文件(如a.c)里定义全局变量v,在其h文件(a.h)里再引用为外部变量,在用到变量v的其他c文件里include a.h,这样的话不管是否读写都无问题。当然,a.c里也要include a.h。

图片

注意:全局变量才能被外部引用,静态变量和局部变量不行的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634631
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136685
  • 静态变量
    +关注

    关注

    0

    文章

    13

    浏览量

    6645
  • extern
    +关注

    关注

    0

    文章

    7

    浏览量

    2951
收藏 人收藏

    评论

    相关推荐

    C语言中不建议使用的关键词

    我们在学校学习或者有参加过C语言培训的话,应该都听说过“不建议使用goto语句”。但是,般不会有人告诉你为什么不建议使用goto语句,类似于这种存在但不建议使用的关键词还有很多。
    发表于 09-08 14:18 1368次阅读

    C语言for循环的用法注意事项

    C 语言种广泛使用的编程语言,它具有简洁、高效、灵活的特点。C 语言中有很多控制流程的语句,
    的头像 发表于 11-20 18:27 2372次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>for循环的<b class='flag-5'>用法</b>和<b class='flag-5'>注意事项</b>

    高速电路中过孔设计注意事项

    ,总结出高速PCb过孔设计中的注意事项关键词:过孔;寄生电容;寄生电感;非穿导孔技术[hide][/hide]
    发表于 08-16 13:33

    [讨论]提高网站关键词排名的28SEO小技巧

    提高网站关键词排名的28SEO小技巧关键词位置、密度、处理 URL中出现关键词(英文) 网页标题中出现关键词(1-3
    发表于 12-01 17:08

    关键词优化有哪些实用的方法

    在这里就来和大家起来分享下。关键词应该怎么去优化,这是我们的思考,然后就要想对应的方法去做优化,通常我们做
    发表于 08-11 01:19

    VHDL语言中信号设置的不同方式,有什么注意事项

    并行同时语句命令主要有哪几种表达方式?VHDL语言中信号设置的不同方式及注意事项
    发表于 04-08 06:26

    介绍一下关键extern用法

    学单片机C语言定要熟悉关键字的用法,本文介绍一下关键ex
    发表于 07-15 06:38

    C语言中的数据类型有哪几种?const有哪些用法

    C语言中的数据类型有哪几种?const有哪些用法?作用域与static用法是什么?extern是如何去使用的?
    发表于 07-22 06:51

    c语言和单片机遇见的小注意事项

    c语言和单片机遇见的小注意事项(会长期更)c语言中1.定义字符串char str[30]="abcdefg";[30]预存空间不可以忘记2.
    发表于 12-09 07:23

    编写C语言时常见的注意事项有哪些

    为什么学C语言?编写C语言时常见的注意事项有哪些?C语言
    发表于 02-25 07:15

    VHDL语言中信号的不同形式设置

    摘要: 通过偶同位产生器逻辑功能的实现过程,介绍了VHDL语言中信号设置的不同方 式及注意事项,并给出了完整的程序代码。 关键词: VH
    发表于 10-06 08:48 1315次阅读
    VHDL<b class='flag-5'>语言中</b>信号的不同形式设置

    C语言中的#和##的用法

    1. 前言 使用#把宏参数变为一个字符串,用##把两宏参数贴合在起. 2. 用法 3. 注意事项
    的头像 发表于 12-06 09:34 7.6w次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>的#和##的<b class='flag-5'>用法</b>

    C语言中的typedef的用法

    在以前的学习中对于C语言中typedef和define的认识是,#define是宏,作用是简单的替换,而typedef也是替换,只不过比define高级的是在替换的时候会进行语法检查。但是后来
    发表于 01-13 13:36 0次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>的typedef的<b class='flag-5'>用法</b>

    C语言中__attribute__ 关键字的用法

    嵌入式开发,离不开 C 语言C语言中有很多语法会直接或间接影响你代码的质量,下面就来讲讲__attribute__ 关键字的
    发表于 10-19 09:06 1.2w次阅读

    浅析C语言中的regiseter关键

    C语言中重要的关键字有很多,static const extern我们之前都讲过,还有在面试
    的头像 发表于 08-25 17:10 1120次阅读
    浅析<b class='flag-5'>C</b><b class='flag-5'>语言中</b>的regiseter<b class='flag-5'>关键</b>字