作者NaiveRed (天真红)
看板C_and_CPP
标题[问题] 全域变数在C/C++的初始化
时间Sun Dec 27 13:42:29 2015
开发平台(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不同回答拼凑出来的想法
不知道有没有哪里理解错?或是能帮我多做补充的
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 134.208.41.23
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1451194952.A.86D.html
1F:推 fr3ak: 先不说全域变数怎麽起始了, 有闻到臭味吗? 12/27 14:33
刚刚有看到这篇 想说fr3@k 怎麽这麽眼熟XD
※ 编辑: NaiveRed (134.208.41.23), 12/27/2015 14:37:07
3F:推 fr3ak: 刚数了一下, 其实有四篇. 是说我也太喜欢全域物件了吧!? XD 12/27 14:44
4F:推 longlongint: 原本 b=a 是程式执行期间才能做的事 12/27 16:07
5F:推 overhead: 执行期才知道a是甚麽 所以当然在执行期才能做b=a 12/27 18:21
6F:→ longlongint: 然後 C++ 支援 class, 建构子里面有更多比 b=a 恶心 12/27 23:44
7F:→ longlongint: 的东西 12/27 23:44
8F:推 legendmtg: 好久没看到fr3@k了@@ 12/28 01:53
9F:→ fr3ak: legendmtg, 慢慢要浮出水面换气了 :-) 12/28 10:25
10F:推 legendmtg: cout会再办吗 虽然现在人不在台湾了orz 12/29 00:52
11F:推 fr3ak: 先等我恢复多点元气再说 QQ 有人愿意帮忙当然是更好 12/29 12:39
12F:→ descent: 期待 cout 12/29 22:34