楼主:
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说实在,对于内建型别而言,=跟()初始化只有意识形态的不同对使用者自订型别才需要严格注意区别