作者:
zzss2003 (brotherD)
2018-03-16 09:34:06開發平台(Platform):Windows
Compiler: XC8; MPLAB X IDE
問題(Question):無法在function外assign value給global variable
錯誤結果(Wrong Output):https://imgur.com/a/PQJU8
程式碼(Code):https://ideone.com/IHzqq8
補充說明(Supplement):在GCC環境,是可以成功被編譯的
我記得
int x = 3;
int x;
x = 3;
這兩個行為對編譯器來說是不一樣的,但我不知道要餵甚麼關鍵字給google。
上網查都查不到原因,請大大幫小弟解惑一下Q_Q
作者:
zzss2003 (brotherD)
2018-03-16 10:04:00為什麼不行?已經declare過了不是嗎~
作者:
Lipraxde (Lipraxde)
2018-03-16 10:06:00x=3放在外面,那你想什麼時候去執行呢?
作者: jerryh001 2018-03-16 10:42:00
全域只能宣告
作者:
CoNsTaR ((const *))
2018-03-16 11:03:00幫二樓翻譯,只要宣告過的變數都可以在函數外面使用
如果單純問int x = 3和x = 3,一個是initial 一個是assign……的樣子,c++做operator overloading才分比較細…吧
作者:
F04E (Fujitsu)
2018-03-16 12:26:00拜託... 這段程式的行為是 宣告一個全域整數變數x並採用預設初期化(0),接著又隱式宣告一個整數變數x並以3為初始化值也就是說你宣告了兩個x,然後第一個x被第二個蓋掉因為C允許這種行為,你用C++編肯定會錯並不是GCC允許變數在函式外執行好嗎
樓上正解,第二個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說實在,對於內建型別而言,=跟()初始化只有意識形態的不同對使用者自訂型別才需要嚴格注意區別