[問題] 全域變數在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