免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4741 | 回复: 16
打印 上一主题 下一主题

遇到很神奇的const初始化问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-08 16:33 |只看该作者 |倒序浏览
代码如下
  1. #include <stdio.h>

  2. int a = 12;
  3. const int b = a;

  4. int main()
  5. {
  6. printf("%d", b);
  7. return 0;
  8. }
复制代码
很奇怪gcc 4.4.3 编译,竟然提示 初始设定元素不是常量 错误,
vs2005确没问题。这个感觉gcc很不合理。
莫非标准不一样? C89 C99?
C89没见 所谓的这个规定呀?

论坛徽章:
0
2 [报告]
发表于 2010-10-08 16:36 |只看该作者
const 初始化时应该赋常量。

论坛徽章:
0
3 [报告]
发表于 2010-10-08 16:39 |只看该作者
对const,c和c++的处理不同。换成c++,用g++就好了。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
4 [报告]
发表于 2010-10-08 16:39 |只看该作者
不同的编译器对标准的支持和实现不一样。

论坛徽章:
0
5 [报告]
发表于 2010-10-08 16:41 |只看该作者
[dave@dave ~]$ gcc -std=c89 test.c
test.c:5: 错误:初始值设定元素不是常量
[dave@dave ~]$ gcc -std=c99 test.c
test.c:5: 错误:初始值设定元素不是常量

论坛徽章:
0
6 [报告]
发表于 2010-10-08 16:42 |只看该作者
回复 3# donglongchao

是,换成g++就好了。
还有比较恶心的就是,
  1. #include <stdio.h>

  2. int c =7;
  3. int b = 12 + c;

  4. int main()
  5. {
  6.   printf("%d", b);

  7.   return 0;
  8. }
复制代码
非const,也提示 所谓的非常量初始化。。
晕呀。。。

论坛徽章:
0
7 [报告]
发表于 2010-10-08 16:45 |只看该作者
全局变量初始化也应该用常量。

论坛徽章:
0
8 [报告]
发表于 2010-10-08 16:46 |只看该作者
所以说嘛,++是很重要的。++帮你把c悄悄地换成了const你不知道而已

论坛徽章:
0
9 [报告]
发表于 2010-10-08 16:47 |只看该作者
说错了,++悄悄帮你把c换成了12而已

论坛徽章:
0
10 [报告]
发表于 2010-10-08 16:51 |只看该作者
回复 7# zhangsuozhu

哎,确实呀,看来支持c++编译器的都做了好多工作呀。还以为自己写的程序正确呢,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP