[問題] 無法在function外assign數值給全域變數

作者: zzss2003 (brotherD)   2018-03-16 09:34:06
開發平台(Platform):Windows
Compiler: XC8; MPLAB X IDE
問題(Question):無法在function外assign value給global variable
錯誤結果(Wrong Output):

程式碼(Code):https://ideone.com/IHzqq8
補充說明(Supplement):在GCC環境,是可以成功被編譯的
我記得
int x = 3;
int x;
x = 3;
這兩個行為對編譯器來說是不一樣的,但我不知道要餵甚麼關鍵字給google。
上網查都查不到原因,請大大幫小弟解惑一下Q_Q
作者: loveflames (咕啾咕啾魔法陣)   2018-03-16 09:40:00
x=3為啥可以寫在函數外面
作者: zzss2003 (brotherD)   2018-03-16 10:04:00
為什麼不行?已經declare過了不是嗎~
作者: Lipraxde (Lipraxde)   2018-03-16 10:06:00
x=3放在外面,那你想什麼時候去執行呢?
作者: jerryh001   2018-03-16 10:42:00
全域只能宣告
作者: CoNsTaR ((const *))   2018-03-16 11:03:00
幫二樓翻譯,只要宣告過的變數都可以在函數外面使用
作者: b0920075 (Void)   2018-03-16 11:05:00
如果單純問int x = 3和x = 3,一個是initial 一個是assign……的樣子,c++做operator overloading才分比較細…吧
作者: legendmtg (CLANNAD)   2018-03-16 12:01:00
因為你寫的不是script language啊
作者: F04E (Fujitsu)   2018-03-16 12:26:00
拜託... 這段程式的行為是 宣告一個全域整數變數x並採用預設初期化(0),接著又隱式宣告一個整數變數x並以3為初始化值也就是說你宣告了兩個x,然後第一個x被第二個蓋掉因為C允許這種行為,你用C++編肯定會錯並不是GCC允許變數在函式外執行好嗎
作者: boss0405 (boss)   2018-03-16 12:38:00
樓上正解,第二個i會被預設成int,gcc也會報warning第二個x...查了一下C89可以這樣用,C99就拿掉了,不過可能部分compiler仍然支援,但是會報warning
作者: dzwei (Cout<< *p << \n ;)   2018-03-16 15:00:00
補充b0920075,int a = 0嚴格說起來應該說assignment init,int a(0)才是所謂init(類似constructor)如果在c++又是物件的話,explicit 就有差了
作者: F04E (Fujitsu)   2018-03-16 15:13:00
說實在,對於內建型別而言,=跟()初始化只有意識形態的不同對使用者自訂型別才需要嚴格注意區別

Links booklink

Contact Us: admin [ a t ] ucptt.com