免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wangzhen11aaa
打印 上一主题 下一主题

自爆个错误,初始值设定元素不是常量 [复制链接]

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
11 [报告]
发表于 2012-12-28 23:36 |只看该作者
本帖最后由 Ager 于 2012-12-29 02:56 编辑

跟分配空间、编译时vs运行时,没有什么关系。

事情是这样的:

程序的调用者,向main函数里吹一口气(Blessing),main就活了。

main函数调用其他已经定义好的函数,就是:已经有“气”的main向其他函数里吹一口气,其他函数就活了。

楼主的这种初始化,并没有任何主体向其中的malloc函数(或其他一般的函数)吹气,所以,这个初始化得不到一个合法的东西。

问题的根子就在这里:

在C当中

编译器扫描得到代码里的一个初始化 —— 前者是不会向后者当中的(被调用的)函数吹气的!

吹气,永远从main函数开始。

因为main函数有“气”,所以,在main里面的malloc函数(或其他一般的函数)才可能有“气”。

这里,因为在初始化中有函数调用表达式,所以,有“气”的main可以向被调用的函数吹气。

然后,这个被吹气的函数,返回一个可以完成初始化的值。


而在C++当中

原本C那种程序从main开始吹气的机制,发生了变化,变得更加复杂。

main函数的角色和地位都发生了改变。

与此同时,main函数之外的初始化,一经编译器扫描到,其中的(被调用的)函数就会被吹气。

所以,楼主的初始化方法,放在C++当中,就是OK的。

以上,仅供参考,呵呵 —— :)

论坛徽章:
0
12 [报告]
发表于 2012-12-29 02:04 |只看该作者
以下为简单说法,不一定「100%正确」:

全局变量和静态变量的初始值是记录在可执行文件里的……

程序还处在生成期间,不可能让编译器去帮你调函数取返回值,所以全局变量和静态变量必须用常量初始化……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP