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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2402|回復: 4
收起左側

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

[復制鏈接]
ID:63113 發表于 2023-3-24 19:24 | 顯示全部樓層 |閱讀模式
本文介紹c語言中關鍵詞extern用法的一個注意事項。
在做項目開發時,在一個單片機C語言程序(用keil開發)中,如果有兩個C文件,在其中一個C文件(設為a文件)定義了一個全局變量v,并在此文件里的程序段里修改此變量,在另外一個C文件(設為b文件)里用外部變量(extern)的方法引用此變量,并讀取變量v,但是,在b中讀取時結果變量v出錯,出現亂值。
什么原因?
v在b文件里作為外部變量,被認為分配的地址在其他地方,在b文件里只是讀取沒有寫入,實際就沒有分配內存地址,從而出錯。
1.png
怎么修改?
方法1,在b文件中定義此變量v,在a文件中用外部變量的方式引用變量v,在a文件里修改變量v,在b文件中回讀變量v,結果正常。
這樣,在b文件里定義了變量v,分配了內存地址,在a文件中引用外部變量v并進行了寫入操作,也分配了內存地址,所以不出錯。
2 - wu.png
方法2,最優方法,在一個c文件(如a.c)里定義全局變量v,在其h文件(a.h)里再引用為外部變量,在用到變量v的其他c文件里include a.h,這樣的話不管是否讀寫都無問題。當然,a.c里也要include a.h。
3.png
注意:全局變量才能被外部引用,靜態變量和局部變量不行的。

回復

使用道具 舉報

ID:491577 發表于 2023-3-25 13:15 | 顯示全部樓層
正常都是用.h文件作為多個.c文件的連接,一個項目有多個.c文件就是為了使用c文件里的函數和全局變量。如果有3個以上c文件用到同一個全局變量你的第一個方法就沒用了。
回復

使用道具 舉報

ID:1068313 發表于 2023-3-25 17:46 | 顯示全部樓層
說到底,就是不規范書寫
回復

使用道具 舉報

ID:378108 發表于 2023-3-25 18:21 | 顯示全部樓層
你的觀點是錯誤的,B.C只是不知道 A.C改變了這個數據而已,這個變量本身就是同一個變量,又不是兩個,他們的地址是一個!!!
這個一般是優化引起的問題,你可以降低優化,或 給變量加上 volatile 說明這個變量會被其他程序改變.
運行的程序,是連接后的一個整體,它可不知道你有幾個文件.

評分

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

查看全部評分

回復

使用道具 舉報

ID:63113 發表于 2023-3-27 11:20 | 顯示全部樓層
zhxzhx 發表于 2023-3-25 18:21
你的觀點是錯誤的,B.C只是不知道 A.C改變了這個數據而已,這個變量本身就是同一個變量,又不是兩個,他們的地 ...

感謝!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表