找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11993|回復(fù): 19
收起左側(cè)

如何在單片機(jī)上使用全局變量

  [復(fù)制鏈接]
ID:308173 發(fā)表于 2019-4-12 20:03 | 顯示全部樓層 |閱讀模式
在單片機(jī)中經(jīng)常會遇到二個不同的.c文件需要使用同一個變量,但如何定義一個變量可以在不同的.c文件中使用呢?  當(dāng)然是使用全局變量啦,可能有的人知道需要用extern來聲明變量,當(dāng)時總是編譯錯誤,當(dāng)然啦,我也是經(jīng)常錯誤,才寫這個筆記的啊

下面我先介紹一下怎么正確的使用,在貼幾張錯誤使用全局變量的方法
如何正確的使用extern,實(shí)現(xiàn)main.c   led.c同時使用變量aaa

1在main.c中定義變量  int aaa=0;
2在led.c中定義 extern int aaa;(千萬不要賦值)

這樣就可以二個.c文件都可以使用aaa這個變量了,我之前為什么一直寫錯呢,我理解錯了extern的作用,其實(shí)extern是告訴編譯器這個變量在其他.c文件里面有了,取其他文件找就行了,哈哈,能搜到我這個的肯定是和我犯了一樣的錯誤吧
現(xiàn)在貼幾張錯誤的使用



顯示提示有錯誤:ERROR L104: MULTIPLE PUBLIC DEFINITIONS


現(xiàn)在把extern int aaa=0;改為extern int aaa;結(jié)果如下


希望能幫到和我一樣的單片機(jī)小白吧


評分

參與人數(shù) 2黑幣 +65 收起 理由
tieq1952 + 15 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2019-4-13 07:16 | 顯示全部樓層
謝謝分享。!
回復(fù)

使用道具 舉報

ID:509148 發(fā)表于 2019-4-13 10:48 | 顯示全部樓層
還有一種不要模塊化,把所有子函數(shù)放在一個.c里面,然后定義變量主函數(shù)最上面定義的就是全局變量,在子函數(shù)里定義就是局部變量
回復(fù)

使用道具 舉報

ID:308173 發(fā)表于 2019-4-14 11:02 來自觸屏版 | 顯示全部樓層
hls123 發(fā)表于 2019-4-13 10:48
還有一種不要模塊化,把所有子函數(shù)放在一個.c里面,然后定義變量主函數(shù)最上面定義的就是全局變量,在子函數(shù) ...

你說的對,開始不會調(diào)用其他模塊的變量我就是把所有模塊放在一起寫,不過這樣寫的話如果以后需要用這個模塊就很不方便了,代碼模塊化以后調(diào)用起來特別方便
回復(fù)

使用道具 舉報

ID:308173 發(fā)表于 2019-4-14 11:03 來自觸屏版 | 顯示全部樓層
tieq1952 發(fā)表于 2019-4-13 07:16
謝謝分享。!

不謝不謝
回復(fù)

使用道具 舉報

ID:553625 發(fā)表于 2019-7-27 10:36 | 顯示全部樓層
能不能舉個程序的例子呀 自己小白
回復(fù)

使用道具 舉報

ID:410689 發(fā)表于 2019-7-27 13:42 | 顯示全部樓層
1在main.c中定義變量  int aaa=0;
2在led.c中定義 extern int aaa;(千萬不要賦值)
第二點(diǎn)非常重要,賦值就會報錯了
回復(fù)

使用道具 舉報

ID:164385 發(fā)表于 2021-11-17 21:27 | 顯示全部樓層
明白了,謝謝
回復(fù)

使用道具 舉報

ID:819198 發(fā)表于 2021-11-18 10:05 | 顯示全部樓層
學(xué)習(xí)了,“其實(shí)extern是告訴編譯器這個變量在其他.c文件里面有了”重點(diǎn)
回復(fù)

使用道具 舉報

ID:608154 發(fā)表于 2021-11-20 19:59 來自觸屏版 | 顯示全部樓層
在led.c中,變量aaa不能賦值了,那有什么用
回復(fù)

使用道具 舉報

ID:562716 發(fā)表于 2021-11-20 20:34 | 顯示全部樓層
常用變量直接建個變量聲明文件?
回復(fù)

使用道具 舉報

ID:40039 發(fā)表于 2023-9-3 22:17 | 顯示全部樓層

在led.c中,變量aaa不能賦值了,那有什么用

是的在其他文件中肯定要賦值的!
回復(fù)

使用道具 舉報

ID:224580 發(fā)表于 2023-9-3 23:09 | 顯示全部樓層
感謝提供出來,我也為這個煩惱了很久,
回復(fù)

使用道具 舉報

ID:744809 發(fā)表于 2023-9-4 08:39 | 顯示全部樓層
likejian 發(fā)表于 2023-9-3 23:09
感謝提供出來,我也為這個煩惱了很久,

其實(shí)最好不要用全局變量,你可以在a.c中定義一個static uint16_t  test = 0; 然后在a.c中寫一個函數(shù),uint16_t GetTest(void)
{
    return test;
}
這樣寫,一個模塊最好只有幾個外部接口,如果變量過多可以用一個結(jié)構(gòu)體包含
回復(fù)

使用道具 舉報

ID:908826 發(fā)表于 2023-9-4 12:54 | 顯示全部樓層
只可以有一個定義,但是可以有很多個聲明
回復(fù)

使用道具 舉報

ID:378108 發(fā)表于 2023-9-5 19:35 | 顯示全部樓層
吳作和 發(fā)表于 2021-11-20 19:59
在led.c中,變量aaa不能賦值了,那有什么用

不能在聲明的時候賦值,C怎么學(xué)的啊
回復(fù)

使用道具 舉報

ID:1091094 發(fā)表于 2023-9-7 15:54 | 顯示全部樓層
123156fsadf 發(fā)表于 2023-9-4 08:39
其實(shí)最好不要用全局變量,你可以在a.c中定義一個static uint16_t  test = 0; 然后在a.c中寫一個函數(shù),uin ...

為什么要這樣寫呢 覺得這樣太麻煩了,一個全局變量直接搞定了
回復(fù)

使用道具 舉報

ID:40039 發(fā)表于 2023-10-14 10:00 | 顯示全部樓層
wuxiaojia 發(fā)表于 2019-7-27 13:42
1在main.c中定義變量  int aaa=0;
2在led.c中定義 extern int aaa;(千萬不要賦值)
第二點(diǎn)非常重要,賦值 ...

在程序中可以賦值,
aaa=0;

回復(fù)

使用道具 舉報

ID:1077009 發(fā)表于 2023-10-16 17:25 | 顯示全部樓層
也可以在一個.c文件里面定義變量,然后在.h頭文件里面extern 這個變量就可以,之后在用到這個變量的.c文件里面包含這個頭文件
回復(fù)

使用道具 舉報

ID:1096316 發(fā)表于 2023-10-17 09:41 來自觸屏版 | 顯示全部樓層
謝謝,真的很需要
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表