调试小技巧:利用volatile关键字选择合适的常数

不知道大家有没有遇到这样的情况,有时候我们需要在代码中使用一个常数,比如-标签的颜色。但关于这个常数取什么值,我们却想逐个看看,比如:

   1: const COLORREF color2=RGB(75,150,25); // what color do I like?
   2: CBrush brush2(color2);
   3: dc.SelectObject(&brush2);
   4: dc.Chord(pt.x-r, pt.y-r, pt.x+r, pt.y+r,0,0,0,0);

 

在这段代码中,如果每次在想要尝试其他颜色时,我们都重新编译构建项目,将会是非常繁琐的。因此,我的做法是:

   1: static COLORREF color2=RGB(75,150,25); // what color do I like?
   2: CBrush brush2(color2);
   3: dc.SelectObject(&brush2);
   4: dc.Chord(pt.x-r, pt.y-r, pt.x+r, pt.y+r,0,0,0,0);

接下来在每次想要尝试其他颜色时,都在Debugger中直接修改为其他颜色值。但在接下来的:

   2: CBrush brush2(color2);

这句中,却发现传进去的参数依然是编译时的值,我的修改没起作用。显然,是C++编译器将color2这个常数直接优化掉了。不过没关系,我们可以用 volatile:

   1: static volatile COLORREF color2=RGB(75,150,25); // what color do I like?

posted on 2009-09-18 14:31  Tactoth  阅读(201)  评论(0编辑  收藏  举报

导航