性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 1
    回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

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

在做項(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)變量和局部變量不行的。

全部回復(fù)(1)
正序查看
倒序查看
yonko123
LV.3
2
2023-03-31 21:18

補(bǔ)充:說到的在KEIL中用extern讀取變量出錯(cuò)是由于讀取時(shí)沒有分配內(nèi)存地址這個(gè)說法似乎有誤,雖然用方法1改變讀寫順序也解決了問題,但是變量出錯(cuò)的原因也可能是由于編譯器過度優(yōu)化引起的。

可以試試降低編譯器優(yōu)化等級,或者在出錯(cuò)的變量前加volatile來避免。理論不重要,實(shí)踐出真知。

1
回復(fù)
發(fā)