[问题] 全域变量在C/C++的初始化

楼主: NaiveRed (天真红)   2015-12-27 13:42:29
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dev c++,VS
问题(Question):
一开始是遇到了这个问题
int a = 10;
int b = a;
int main(){return 0;}
在C是不行的,错误讯息: initializer element is not constant
C++则没问题
所以我改成
const int a = 10;
int b = a;
int main(){return 0;}
依旧是不行
查了一下知道了大概的理由,但还是有点不知所以
看完后的理解是:
C在初始化全域变量时需要constant expressions,因为他是存在Data segment
然后在C++初始化全域变量时则不需要
至于加了const后还是不行则是因为在C里不算是标准的constant expressions
他需要compile-time constant(全域变量是在compile time初始化的)
(以上是从stackoverflow不同回答拼凑出来的想法
不知道有没有哪里理解错?或是能帮我多做补充的
谢谢!
作者: fr3ak (fr3@K)   2015-12-27 14:33:00
先不说全域变量怎么起始了, 有闻到臭味吗?相关废文 http://goo.gl/sP6KAG刚数了一下, 其实有四篇. 是说我也太喜欢全域物件了吧!? XD
作者: longlongint (华哥尔)   2015-12-27 16:07:00
原本 b=a 是程式执行期间才能做的事
作者: overhead (overhead)   2015-12-27 18:21:00
执行期才知道a是什么 所以当然在执行期才能做b=a
作者: longlongint (华哥尔)   2015-12-27 23:44:00
然后 C++ 支援 class, 建构子里面有更多比 b=a 恶心的东西
作者: legendmtg (CLANNAD)   2015-12-28 01:53:00
好久没看到fr3@k了@@
作者: fr3ak (fr3@K)   2015-12-28 10:25:00
legendmtg, 慢慢要浮出水面换气了 :-)
作者: legendmtg (CLANNAD)   2015-12-29 00:52:00
cout会再办吗 虽然现在人不在台湾了orz
作者: fr3ak (fr3@K)   2015-12-29 12:39:00
先等我恢复多点元气再说 QQ 有人愿意帮忙当然是更好
作者: descent (“雄辩是银,沉默是金”)   2015-12-29 22:34:00
期待 cout

Links booklink

Contact Us: admin [ a t ] ucptt.com