在做項(xiàng)目開發(fā)時(shí),在一個(gè)單片機(jī)C語言程序(用keil開發(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文件里只是讀取沒有寫入,實(shí)際就沒有分配內(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,這樣的話不管是否讀寫都無問題。當(dāng)然,a.c里也要include a.h。
注意:全局變量才能被外部引用,靜態(tài)變量和局部變量不行的。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
單片機(jī)
-
C語言
-
靜態(tài)變量
-
extern
相關(guān)推薦
我們在學(xué)校學(xué)習(xí)或者有參加過C語言培訓(xùn)的話,應(yīng)該都聽說過“不建議使用goto語句”。但是,一般不會(huì)有人告訴你為什么不建議使用goto語句,類似于這種存在但不建議使用的關(guān)鍵詞還有很多。
發(fā)表于 09-08 14:18
?1271次閱讀
C 語言是一種廣泛使用的編程語言,它具有簡潔、高效、靈活的特點(diǎn)。C 語言中有很多控制流程的語句,
發(fā)表于 11-20 18:27
?1690次閱讀
,總結(jié)出高速PCb過孔設(shè)計(jì)中的一些注意事項(xiàng)。關(guān)鍵詞:過孔;寄生電容;寄生電感;非穿導(dǎo)孔技術(shù)[hide][/hide]
發(fā)表于 08-16 13:33
提高網(wǎng)站關(guān)鍵詞排名的28個(gè)SEO小技巧關(guān)鍵詞位置、密度、處理 URL中出現(xiàn)關(guān)鍵詞(英文) 網(wǎng)頁標(biāo)題中出現(xiàn)關(guān)鍵詞(1-3
發(fā)表于 12-01 17:08
在這里就來和大家一起來分享一下。關(guān)鍵詞應(yīng)該怎么去優(yōu)化,這是我們的一個(gè)思考,然后就要想對應(yīng)的方法去做優(yōu)化,通常我們做
發(fā)表于 08-11 01:19
并行同時(shí)語句命令主要有哪幾種表達(dá)方式?VHDL語言中信號設(shè)置的不同方式及注意事項(xiàng)
發(fā)表于 04-08 06:26
學(xué)單片機(jī)C語言一定要熟悉關(guān)鍵字的用法,本文介紹一下關(guān)鍵字ex
發(fā)表于 07-15 06:38
C語言中的數(shù)據(jù)類型有哪幾種?const有哪些用法?作用域與static用法是什么?extern是如何去使用的?
發(fā)表于 07-22 06:51
c語言和單片機(jī)遇見的小注意事項(xiàng)(會(huì)長期更)c語言中1.定義字符串char str[30]="abcdefg";[30]預(yù)存空間不可以忘記2.
發(fā)表于 12-09 07:23
為什么學(xué)C語言?編寫C語言時(shí)常見的注意事項(xiàng)有哪些?C語言
發(fā)表于 02-25 07:15
摘要: 通過一個(gè)偶同位產(chǎn)生器邏輯功能的實(shí)現(xiàn)過程,介紹了VHDL語言中信號設(shè)置的不同方 式及注意事項(xiàng),并給出了完整的程序代碼。 關(guān)鍵詞: VH
發(fā)表于 10-06 08:48
?1227次閱讀
1. 前言 使用#把宏參數(shù)變?yōu)?b class='flag-5'>一個(gè)字符串,用##把兩個(gè)宏參數(shù)貼合在一起. 2. 一般用法 3. 注意事項(xiàng)
發(fā)表于 12-06 09:34
?7.6w次閱讀
在以前的學(xué)習(xí)中對于C語言中typedef和define的認(rèn)識(shí)是,#define是宏,作用是簡單的替換,而typedef也是替換,只不過比define高級的是在替換的時(shí)候會(huì)進(jìn)行語法檢查。但是后來
發(fā)表于 01-13 13:36
?0次下載
嵌入式開發(fā),離不開 C 語言,C語言中有很多語法會(huì)直接或間接影響你代碼的質(zhì)量,下面就來講講__attribute__ 關(guān)鍵字的
發(fā)表于 10-19 09:06
?1.1w次閱讀
C語言中重要的關(guān)鍵字有很多,static const extern我們之前都講過,還有一個(gè)在面試
發(fā)表于 08-25 17:10
?1006次閱讀
評論