[问题] 无法在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):https://imgur.com/a/PQJU8
程式码(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