音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

C語言中變量的聲明和定義的關(guān)系

作者:平常人 欄目:單片機
C語言中變量的聲明和定義的關(guān)系
在英文里有兩個詞涉及這個問題:declare 和 define,在中文中這兩個詞都可以翻成“定義”,但在C語言中他們有不同的意義;讓我們稱declare=聲明,define=定義。

“聲明(declare)”是用于定義一個變量的類型;“定義(define)”是用于定義一個變量所占用的存儲;顯然,一個變量的類型可以定義多次,只要他們不互相矛盾即可;而一個變量的存儲只能定義一次,否則程序如何用一個變量名訪問多于一個的存儲空間呢?

每次引用一個變量時,引用變量的語句行之前必須出現(xiàn)該變量的聲明,該聲明可以是直接出現(xiàn)在這個語句行所在的源文件中,或出現(xiàn)在一個頭文件中,該源文件用include包含這個頭文件。

一個項目中可以有多個源文件,但在所有的源文件中只允許出現(xiàn)一次對某個變量的定義。

這里借用“新手園地”中小羅納耳朵的一個問題作為例子:


我用Keil寫程序時,子程序里需要用到定義一個數(shù)組 array[]={0x01,0x02}

放在main函數(shù)里定義會提示array未定義!

但是如果放在頭文件config.h里面定義為:
  extern code unsigned CHAR array[]={0x01,0x02};

結(jié)果編譯時出現(xiàn) MULTIPLE PUBLIC DEFINITIONS定義。但是我的頭文件里面已經(jīng)用預處理命令了

     #ifndef __CONFIG_H__
     #define __CONFIG_H__
     
    頭文件的內(nèi)容

     #endif      
   
為什么還會出現(xiàn)這種重復定義的錯誤?


他的錯誤是,下面這行是定義array的存儲,而他又把這行放到了頭文件config.h中,等于是在多個源文件中重復地定義array的存儲:
extern code unsigned CHAR array[]={0x01,0x02};

正確的做法是在頭文件中用這樣的聲明語句(必須加extern,否則變成定義存儲了):
extern code unsigned CHAR array[]; // 聲明array是一個外部變量

然后在某個源文件中加入這樣的語句(此處不必加extern):
code unsigned CHAR array[] = {0x01, 0x02}; // 定義array的存儲

2樓: >>參與討論
平常人
奇怪,經(jīng)常有人問相關(guān)的問題,或犯這類錯誤,此帖卻無人關(guān)注
可能我說的太清楚了,沒人有任何疑問了,哈哈,太好了!

自己頂一下。

3樓: >>參與討論
mochaowu03
"="號不可隨便用
"="號不可隨便用哦,頂你一下

4樓: >>參與討論
jt4117

 
5樓: >>參與討論
guet
這是變量的存儲問題
假如有兩個文件file1.c,file2.c
在file1.c中定義了一個變量 int var ;
如果在file2.c中也想用這個變量,只需將var聲明為外部變量既可
extern int var //是聲明不是定義
如果我只想讓var變量只能用于本文件,其它文件不能使用它,那么在定義var的時候聲明為靜態(tài)局部變量,既在file1.c中定義為 static int var


6樓: >>參與討論
huangqi412
學習
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教各位freescale單片機指令問題
thank you
沒有串口,可不可以用USB轉(zhuǎn)串口的線來連接編程器?
[求助]24C04 SDA被拉低
關(guān)于串口通訊的速度和正確率~~~~
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號