读书人

关于const有关问题

发布时间: 2012-04-25 19:32:32 作者: rapoo

关于const问题
为什么const int b=5;char m[b];可以
但是int a=5;const int b=a;(这里初始化没报错)char m[b]就不行了


[解决办法]
const int b=a;
这只是说b代表的那篇内存b自己不能修改而已,而那篇内存的初值在编译时还不可知,所以不能初始化
[解决办法]
前一种写法编译器可以确定b中拥有一个常数。而后一种写法虽然也给了它一个常数,可却是通过变量赋给它的,结果编译器就弄不清b里面究竟会不会有一个常数了。
[解决办法]

探讨
为什么const int b=5;char m[b];可以
但是int a=5;const int b=a;(这里初始化没报错)char m[b]就不行了

[解决办法]
仅仅是一个优化而已。
如果你加上 const volatile int b=5; 你就知道还能不能编译了。(不要用支持c99的编译器)
[解决办法]
探讨
前一种写法编译器可以确定b中拥有一个常数。而后一种写法虽然也给了它一个常数,可却是通过变量赋给它的,结果编译器就弄不清b里面究竟会不会有一个常数了。

[解决办法]
就一个优化的缘故

const volatile int a=5; int b[a];你看看还能否编译成功 (c99编译器除外)
[解决办法]
探讨

引用:
为什么const int b=5;char m[b];可以
但是int a=5;const int b=a;(这里初始化没报错)char m[b]就不行了


因为优化的缘故。char m[b]这里在编译的时候直接用5替代了。 而 const int b=a;这样是没办法优化的。

[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

读书人网 >C语言

热点推荐