在做項(xiàng)目開(kāi)發(fā)時(shí),在一個(gè)單片機(jī)C語(yǔ)言程序(用keil開(kāi)發(fā))中,如果有兩個(gè)C文件,在其中一個(gè)C文件(設(shè)為a文件)定義了一個(gè)全局變量v,并在此文件里的程序段里修改此變量,在另外一個(gè)C文件(設(shè)為b文件)里用外部變量(extern)的方法引用此變量,并讀取變量v,但是,在b中讀取時(shí)結(jié)果變量v出錯(cuò),出現(xiàn)亂值。
什么原因?
v在b文件里作為外部變量,被認(rèn)為分配的地址在其他地方,在b文件里只是讀取沒(méi)有寫入,實(shí)際就沒(méi)有分配內(nèi)存地址,從而出錯(cuò)。
怎么修改?
方法1,在b文件中定義此變量v,在a文件中用外部變量的方式引用變量v,在a文件里修改變量v,在b文件中回讀變量v,結(jié)果正常。
這樣,在b文件里定義了變量v,分配了內(nèi)存地址,在a文件中引用外部變量v并進(jìn)行了寫入操作,也分配了內(nèi)存地址,所以不出錯(cuò)。
方法2,最優(yōu)方法,在一個(gè)c文件(如a.c)里定義全局變量v,在其h文件(a.h)里再引用為外部變量,在用到變量v的其他c文件里include a.h,這樣的話不管是否讀寫都無(wú)問(wèn)題。當(dāng)然,a.c里也要include a.h。
注意:全局變量才能被外部引用,靜態(tài)變量和局部變量不行的。
-
單片機(jī)
+關(guān)注
關(guān)注
6044文章
44628瀏覽量
638990 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7615瀏覽量
137845 -
靜態(tài)變量
+關(guān)注
關(guān)注
0文章
13瀏覽量
6688 -
extern
+關(guān)注
關(guān)注
0文章
7瀏覽量
2966
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
C語(yǔ)言中不建議使用的關(guān)鍵詞
C語(yǔ)言for循環(huán)的用法和注意事項(xiàng)
![<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>for循環(huán)的<b class='flag-5'>用法</b>和<b class='flag-5'>注意事項(xiàng)</b>](https://file1.elecfans.com/web2/M00/B1/53/wKgZomVbKXCAOrsrAADuol1ljN0523.jpg)
高速電路中過(guò)孔設(shè)計(jì)注意事項(xiàng)
[討論]提高網(wǎng)站關(guān)鍵詞排名的28個(gè)SEO小技巧
關(guān)鍵詞優(yōu)化有哪些實(shí)用的方法
VHDL語(yǔ)言中信號(hào)設(shè)置的不同方式,有什么注意事項(xiàng)?
C語(yǔ)言中的數(shù)據(jù)類型有哪幾種?const有哪些用法?
c語(yǔ)言和單片機(jī)遇見(jiàn)的小注意事項(xiàng)
編寫C語(yǔ)言時(shí)常見(jiàn)的注意事項(xiàng)有哪些
VHDL語(yǔ)言中信號(hào)的不同形式設(shè)置
![VHDL<b class='flag-5'>語(yǔ)言中</b>信號(hào)的不同形式設(shè)置](https://file1.elecfans.com//web2/M00/A6/07/wKgZomUMO1-AJGneAAAUkxihzGI065.jpg)
C語(yǔ)言中的#和##的用法
![<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>的#和##的<b class='flag-5'>用法</b>](https://file.elecfans.com/web1/M00/D2/25/pIYBAF_IQOGAMwfiAAB5c0-AmmY227.png)
C語(yǔ)言中的typedef的用法
![<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>的typedef的<b class='flag-5'>用法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論