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

標題: 容易出錯!C語言中的外部變量關鍵詞extern可不能隨便使用 [打印本頁]

作者: yonko    時間: 2023-3-24 19:24
標題: 容易出錯!C語言中的外部變量關鍵詞extern可不能隨便使用
本文介紹c語言中關鍵詞extern用法的一個注意事項。
在做項目開發時,在一個單片機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。

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


作者: hhh402    時間: 2023-3-25 13:15
正常都是用.h文件作為多個.c文件的連接,一個項目有多個.c文件就是為了使用c文件里的函數和全局變量。如果有3個以上c文件用到同一個全局變量你的第一個方法就沒用了。
作者: 642744087    時間: 2023-3-25 17:46
說到底,就是不規范書寫
作者: zhxzhx    時間: 2023-3-25 18:21
你的觀點是錯誤的,B.C只是不知道 A.C改變了這個數據而已,這個變量本身就是同一個變量,又不是兩個,他們的地址是一個!!!
這個一般是優化引起的問題,你可以降低優化,或 給變量加上 volatile 說明這個變量會被其他程序改變.
運行的程序,是連接后的一個整體,它可不知道你有幾個文件.
作者: yonko    時間: 2023-3-27 11:20
zhxzhx 發表于 2023-3-25 18:21
你的觀點是錯誤的,B.C只是不知道 A.C改變了這個數據而已,這個變量本身就是同一個變量,又不是兩個,他們的地 ...

感謝!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1