欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2728|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

容易出錯!C語言中的外部變量關(guān)鍵詞extern可不能隨便使用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:63113 發(fā)表于 2023-3-24 19:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
本文介紹c語言中關(guān)鍵詞extern用法的一個注意事項。
在做項目開發(fā)時,在一個單片機(jī)C語言程序(用keil開發(fā))中,如果有兩個C文件,在其中一個C文件(設(shè)為a文件)定義了一個全局變量v,并在此文件里的程序段里修改此變量,在另外一個C文件(設(shè)為b文件)里用外部變量(extern)的方法引用此變量,并讀取變量v,但是,在b中讀取時結(jié)果變量v出錯,出現(xiàn)亂值。
什么原因?
v在b文件里作為外部變量,被認(rèn)為分配的地址在其他地方,在b文件里只是讀取沒有寫入,實(shí)際就沒有分配內(nèi)存地址,從而出錯。

怎么修改?
方法1,在b文件中定義此變量v,在a文件中用外部變量的方式引用變量v,在a文件里修改變量v,在b文件中回讀變量v,結(jié)果正常。
這樣,在b文件里定義了變量v,分配了內(nèi)存地址,在a文件中引用外部變量v并進(jìn)行了寫入操作,也分配了內(nèi)存地址,所以不出錯。

方法2,最優(yōu)方法,在一個c文件(如a.c)里定義全局變量v,在其h文件(a.h)里再引用為外部變量,在用到變量v的其他c文件里include a.h,這樣的話不管是否讀寫都無問題。當(dāng)然,a.c里也要include a.h。

注意:全局變量才能被外部引用,靜態(tài)變量和局部變量不行的。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:491577 發(fā)表于 2023-3-25 13:15 | 只看該作者
正常都是用.h文件作為多個.c文件的連接,一個項目有多個.c文件就是為了使用c文件里的函數(shù)和全局變量。如果有3個以上c文件用到同一個全局變量你的第一個方法就沒用了。
回復(fù)

使用道具 舉報

板凳
ID:1068313 發(fā)表于 2023-3-25 17:46 | 只看該作者
說到底,就是不規(guī)范書寫
回復(fù)

使用道具 舉報

地板
ID:378108 發(fā)表于 2023-3-25 18:21 | 只看該作者
你的觀點(diǎn)是錯誤的,B.C只是不知道 A.C改變了這個數(shù)據(jù)而已,這個變量本身就是同一個變量,又不是兩個,他們的地址是一個!!!
這個一般是優(yōu)化引起的問題,你可以降低優(yōu)化,或 給變量加上 volatile 說明這個變量會被其他程序改變.
運(yùn)行的程序,是連接后的一個整體,它可不知道你有幾個文件.

評分

參與人數(shù) 1黑幣 +5 收起 理由
diyage + 5 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:63113 發(fā)表于 2023-3-27 11:20 | 只看該作者
zhxzhx 發(fā)表于 2023-3-25 18:21
你的觀點(diǎn)是錯誤的,B.C只是不知道 A.C改變了這個數(shù)據(jù)而已,這個變量本身就是同一個變量,又不是兩個,他們的地 ...

感謝!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表