常量折叠???浮云!
Q:什么是常量折叠? A:常量折叠(constant folding),一种编译优化技术。例如:“2+2”应该在编译时就处理为4;
比如有以下代码:
const double PI = 3.141592653589793; const double d = 10.0; const double c = d/2*PI;
在编译时如果使用到c就用计算的结果来代替,这就是“常量折叠”。
应该说常量折叠就是编译器不想浪费静态内存而对const定义的常量进行预编译的结果。。。
上段代码,试着修改const定义的常量的值:
/* {/ . .\} ( (oo) ) +--------------oOOo---︶︶︶︶---oOOo------------------+ # FileName : const_folding.c # Describe : 修改const定义的常量的值 # Author : Lazy.monkey™ # Email : lazymonkey.me@gmail.com # HomePage : lazymonkey.is-programmer.com # Version : 0.0.1 # LastChange: 2012-05-18 22:41:16 +------------------------------------Oooo--------------+ */ #include <stdio.h> int main (int argc, const char *argv[]) { const int a = 1; printf ("a = %d\n", a); *((int *) &a) = 2; printf ("a = %d\n", a); return 0; }
运行结果:
a = 1
a = 2
可以了!_ Ok, I enjoy the time!
ps:这是以前在《C和指针》中看到的,原书中提了这种赋值方法,但又提到没人会使用这种蛋疼的方法去为一个变量赋值,呃。。。莫非我就是那个蛋疼的人?;(