常量折叠???浮云!

lazymonkey posted @ 2012年5月18日 22:55 in 语言与设计 with tags C语言 , 2233 阅读
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和指针》中看到的,原书中提了这种赋值方法,但又提到没人会使用这种蛋疼的方法去为一个变量赋值,呃。。。莫非我就是那个蛋疼的人?;(


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter